# HG changeset patch # User Florian Preinstorfer # Date 1309862422 -7200 # Node ID a8e247705b9415eb1c55b2e1c8cb9f4113168e6d # Parent e38bb637328ca73e44588ffd50dfcecc34bab104 improve unittest basic example in the doc (Issue 11468) diff -r e38bb637328c -r a8e247705b94 Doc/library/unittest.rst --- a/Doc/library/unittest.rst Mon Jul 04 22:28:00 2011 -0500 +++ b/Doc/library/unittest.rst Tue Jul 05 12:40:22 2011 +0200 @@ -113,37 +113,28 @@ running tests. This section demonstrates that a small subset of the tools suffice to meet the needs of most users. -Here is a short script to test three functions from the :mod:`random` module:: - - import random - import unittest - - class TestSequenceFunctions(unittest.TestCase): - - def setUp(self): - self.seq = list(range(10)) - - def test_shuffle(self): - # make sure the shuffled sequence does not lose any elements - random.shuffle(self.seq) - self.seq.sort() - self.assertEqual(self.seq, list(range(10))) - - # should raise an exception for an immutable sequence - self.assertRaises(TypeError, random.shuffle, (1,2,3)) - - def test_choice(self): - element = random.choice(self.seq) - self.assertTrue(element in self.seq) - - def test_sample(self): - with self.assertRaises(ValueError): - random.sample(self.seq, 20) - for element in random.sample(self.seq, 5): - self.assertTrue(element in self.seq) - - if __name__ == '__main__': - unittest.main() +Here is a short script to test three functions:: + + import unittest + + class TestStringMethods(unittest.TestCase): + + def test_upper(self): + self.assertEqual('foo'.upper(), 'FOO') + + def test_isupper(self): + self.assertTrue('FOO'.isupper()) + self.assertFalse('Foo'.isupper()) + + def test_split(self): + s = 'hello world' + self.assertEqual(s.split(), ['hello', 'world']) + # check that s.split fails when the separator is not a string + with self.assertRaises(TypeError): + s.split(2) + + if __name__ == '__main__': + unittest.main() A testcase is created by subclassing :class:`unittest.TestCase`. The three individual tests are defined with methods whose names start with the letters @@ -151,16 +142,15 @@ represent tests. The crux of each test is a call to :meth:`~TestCase.assertEqual` to check for an -expected result; :meth:`~TestCase.assertTrue` to verify a condition; or -:meth:`~TestCase.assertRaises` to verify that an expected exception gets raised. -These methods are used instead of the :keyword:`assert` statement so the test -runner can accumulate all test results and produce a report. +expected result; :meth:`~TestCase.assertTrue` or :meth:`~TestCase.assertFalse` +to verify a condition; or :meth:`~TestCase.assertRaises` to verify that an +expected exception gets raised. These methods are used instead of the +:keyword:`assert` statement so the test runner can accumulate all test results +and produce a report. When a :meth:`~TestCase.setUp` method is defined, the test runner will run that method prior to each test. Likewise, if a :meth:`~TestCase.tearDown` method is -defined, the test runner will invoke that method after each test. In the -example, :meth:`~TestCase.setUp` was used to create a fresh sequence for each -test. +defined, the test runner will invoke that method after each test. The final block shows a simple way to run the tests. :func:`unittest.main` provides a command-line interface to the test script. When run from the command @@ -176,18 +166,18 @@ finer level of control, less terse output, and no requirement to be run from the command line. For example, the last two lines may be replaced with:: - suite = unittest.TestLoader().loadTestsFromTestCase(TestSequenceFunctions) + suite = unittest.TestLoader().loadTestsFromTestCase(TestStringMethods) unittest.TextTestRunner(verbosity=2).run(suite) Running the revised script from the interpreter or another script produces the following output:: - test_choice (__main__.TestSequenceFunctions) ... ok - test_sample (__main__.TestSequenceFunctions) ... ok - test_shuffle (__main__.TestSequenceFunctions) ... ok + test_isupper (__main__.TestStringMethods) ... ok + test_split (__main__.TestStringMethods) ... ok + test_upper (__main__.TestStringMethods) ... ok ---------------------------------------------------------------------- - Ran 3 tests in 0.110s + Ran 3 tests in 0.001s OK