Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Support
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in / Register
Toggle navigation
C
cpython
Project overview
Project overview
Details
Activity
Releases
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Issues
0
Issues
0
List
Boards
Labels
Milestones
Merge Requests
0
Merge Requests
0
Analytics
Analytics
Repository
Value Stream
Wiki
Wiki
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Create a new issue
Commits
Issue Boards
Open sidebar
Kirill Smelkov
cpython
Commits
2e3998fa
Commit
2e3998fa
authored
Mar 24, 2015
by
Ezio Melotti
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
#11468: improve unittest basic example. Initial patch by Florian Preinstorfer.
parent
19276f18
Changes
2
Hide whitespace changes
Inline
Side-by-side
Showing
2 changed files
with
29 additions
and
37 deletions
+29
-37
Doc/library/unittest.rst
Doc/library/unittest.rst
+28
-37
Misc/ACKS
Misc/ACKS
+1
-0
No files found.
Doc/library/unittest.rst
View file @
2e3998fa
...
@@ -80,37 +80,29 @@ The :mod:`unittest` module provides a rich set of tools for constructing and
...
@@ -80,37 +80,29 @@ The :mod:`unittest` module provides a rich set of tools for constructing and
running tests. This section demonstrates that a small subset of the tools
running tests. This section demonstrates that a small subset of the tools
suffice to meet the needs of most users.
suffice to meet the needs of most users.
Here is a short script to test three
functions from the :mod:`random` module
::
Here is a short script to test three
string methods
::
import random
import unittest
import unittest
class TestSequenceFunctions(unittest.TestCase):
def setUp(self):
class TestStringMethods(unittest.TestCase):
self.seq = list(range(10))
def test_shuffle(self):
def test_upper(self):
# make sure the shuffled sequence does not lose any elements
self.assertEqual('foo'.upper(), 'FOO')
random.shuffle(self.seq)
self.seq.sort()
self.assertEqual(self.seq, list(range(10)))
# should raise an exception for an immutable sequence
def test_isupper(self):
self.assertRaises(TypeError, random.shuffle, (1,2,3))
self.assertTrue('FOO'.isupper())
self.assertFalse('Foo'.isupper())
def test_choice(self):
def test_split(self):
element = random.choice(self.seq)
s = 'hello world'
self.assertTrue(element in self.seq)
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)
def test_sample(self):
if __name__ == '__main__':
with self.assertRaises(ValueError):
unittest.main()
random.sample(self.seq, 20)
for element in random.sample(self.seq, 5):
self.assertTrue(element in self.seq)
if __name__ == '__main__':
unittest.main()
A testcase is created by subclassing :class:`unittest.TestCase`. The three
A testcase is created by subclassing :class:`unittest.TestCase`. The three
individual tests are defined with methods whose names start with the letters
individual tests are defined with methods whose names start with the letters
...
@@ -118,16 +110,15 @@ individual tests are defined with methods whose names start with the letters
...
@@ -118,16 +110,15 @@ individual tests are defined with methods whose names start with the letters
represent tests.
represent tests.
The crux of each test is a call to :meth:`~TestCase.assertEqual` to check for an
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
expected result; :meth:`~TestCase.assertTrue` or :meth:`~TestCase.assertFalse`
:meth:`~TestCase.assertRaises` to verify that an expected exception gets raised.
to verify a condition; or :meth:`~TestCase.assertRaises` to verify that a
These methods are used instead of the :keyword:`assert` statement so the test
specific exception gets raised. These methods are used instead of the
runner can accumulate all test results and produce a report.
: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
The :meth:`~TestCase.setUp` and :meth:`~TestCase.tearDown` methods allow you
method prior to each test. Likewise, if a :meth:`~TestCase.tearDown` method is
to define instructions that will be executed before and after each test method.
defined, the test runner will invoke that method after each test. In the
They are covered in more details in the section :ref:`organizing-tests`.
example, :meth:`~TestCase.setUp` was used to create a fresh sequence for each
test.
The final block shows a simple way to run the tests. :func:`unittest.main`
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
provides a command-line interface to the test script. When run from the command
...
@@ -142,12 +133,12 @@ line, the above script produces an output that looks like this::
...
@@ -142,12 +133,12 @@ line, the above script produces an output that looks like this::
Passing the ``-v`` option to your test script will instruct :func:`unittest.main`
Passing the ``-v`` option to your test script will instruct :func:`unittest.main`
to enable a higher level of verbosity, and produce the following output::
to enable a higher level of verbosity, and produce the following output::
test_
choice (__main__.TestSequenceFunction
s) ... ok
test_
isupper (__main__.TestStringMethod
s) ... ok
test_s
ample (__main__.TestSequenceFunction
s) ... ok
test_s
plit (__main__.TestStringMethod
s) ... ok
test_
shuffle (__main__.TestSequenceFunction
s) ... ok
test_
upper (__main__.TestStringMethod
s) ... ok
----------------------------------------------------------------------
----------------------------------------------------------------------
Ran 3 tests in 0.
110
s
Ran 3 tests in 0.
001
s
OK
OK
...
...
Misc/ACKS
View file @
2e3998fa
...
@@ -1085,6 +1085,7 @@ Claudiu Popa
...
@@ -1085,6 +1085,7 @@ Claudiu Popa
John Popplewell
John Popplewell
Davin Potts
Davin Potts
Guillaume Pratte
Guillaume Pratte
Florian Preinstorfer
Amrit Prem
Amrit Prem
Paul Prescod
Paul Prescod
Donovan Preston
Donovan Preston
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment