blob: b1c091838c9a8b9096afcefb0f914ecde9853a5d [file] [log] [blame]
Fred Drakeb9ad2282001-04-07 05:41:39 +00001\section{\module{unittest} ---
2 Unit testing framework}
3
4\declaremodule{standard}{unittest}
Fred Drake62a26692001-04-12 19:34:38 +00005\modulesynopsis{Unit testing framework for Python.}
Fred Drakeb9ad2282001-04-07 05:41:39 +00006\moduleauthor{Steve Purcell}{stephen\textunderscore{}purcell@yahoo.com}
7\sectionauthor{Steve Purcell}{stephen\textunderscore{}purcell@yahoo.com}
8\sectionauthor{Fred L. Drake, Jr.}{fdrake@acm.org}
9
Fred Drake5430f4e2002-10-10 16:16:25 +000010\versionadded{2.1}
Fred Drakeb9ad2282001-04-07 05:41:39 +000011
12The Python unit testing framework, often referred to as ``PyUnit,'' is
13a Python language version of JUnit, by Kent Beck and Erich Gamma.
14JUnit is, in turn, a Java version of Kent's Smalltalk testing
15framework. Each is the de facto standard unit testing framework for
16its respective language.
17
18PyUnit supports test automation, sharing of setup and shutdown code
19for tests, aggregation of tests into collections, and independence of
20the tests from the reporting framework. The \module{unittest} module
21provides classes that make it easy to support these qualities for a
22set of tests.
23
Fred Drake62a26692001-04-12 19:34:38 +000024To achieve this, PyUnit supports some important concepts:
Fred Drakeb9ad2282001-04-07 05:41:39 +000025
26\begin{definitions}
Fred Drake29be7012001-04-10 22:25:06 +000027\term{test fixture}
28A \dfn{test fixture} represents the preparation needed to perform one
29or more tests, and any associate cleanup actions. This may involve,
30for example, creating temporary or proxy databases, directories, or
31starting a server process.
32
Fred Drakeb9ad2282001-04-07 05:41:39 +000033\term{test case}
34A \dfn{test case} is the smallest unit of testing. It checks for a
35specific response to a particular set of inputs. PyUnit provides a
36base class, \class{TestCase}, which may be used to create new test
37cases.
38
39\term{test suite}
40A \dfn{test suite} is a collection of test cases, test suites, or
41both. It is used to aggregate tests that should be executed
42together.
43
44\term{test runner}
45A \dfn{test runner} is a component which orchestrates the execution of
46tests and provides the outcome to the user. The runner may use a
47graphical interface, a textual interface, or return a special value to
48indicate the results of executing the tests.
49\end{definitions}
50
51
Fred Drake62a26692001-04-12 19:34:38 +000052The test case and test fixture concepts are supported through the
53\class{TestCase} and \class{FunctionTestCase} classes; the former
Just van Rossumedd179e2002-12-15 13:14:22 +000054should be used when creating new tests, and the latter can be used when
Fred Drake62a26692001-04-12 19:34:38 +000055integrating existing test code with a PyUnit-driven framework. When
56building test fixtures using \class{TestCase}, the \method{setUp()}
57and \method{tearDown()} methods can be overridden to provide
58initialization and cleanup for the fixture. With
59\class{FunctionTestCase}, existing functions can be passed to the
60constructor for these purposes. When the test is run, the
61fixture initialization is run first; if it succeeds, the cleanup
62method is run after the test has been executed, regardless of the
63outcome of the test. Each instance of the \class{TestCase} will only
64be used to run a single test method, so a new fixture is created for
65each test.
66
67Test suites are implemented by the \class{TestSuite} class. This
68class allows individual tests and test suites to be aggregated; when
69the suite is executed, all tests added directly to the suite and in
70``child'' test suites are run.
71
72A test runner is an object that provides a single method,
73\method{run()}, which accepts a \class{TestCase} or \class{TestSuite}
74object as a parameter, and returns a result object. The class
75\class{TestResult} is provided for use as the result object. PyUnit
76provide the \class{TextTestRunner} as an example test runner which
77reports test results on the standard error stream by default.
78Alternate runners can be implemented for other environments (such as
79graphical environments) without any need to derive from a specific
80class.
81
Fred Drakeb9ad2282001-04-07 05:41:39 +000082
83\begin{seealso}
84 \seetitle[http://pyunit.sourceforge.net/]{PyUnit Web Site}{The
85 source for further information on PyUnit.}
86 \seetitle[http://www.XProgramming.com/testfram.htm]{Simple Smalltalk
87 Testing: With Patterns}{Kent Beck's original paper on
88 testing frameworks using the pattern shared by
89 \module{unittest}.}
90\end{seealso}
91
92
Fred Drakeb9ad2282001-04-07 05:41:39 +000093\subsection{Organizing test code
94 \label{organizing-tests}}
95
Fred Drake0056a422001-04-12 04:50:06 +000096The basic building blocks of unit testing are \dfn{test cases} ---
97single scenarios that must be set up and checked for correctness. In
98PyUnit, test cases are represented by instances of the
99\class{TestCase} class in the \refmodule{unittest} module. To make
100your own test cases you must write subclasses of \class{TestCase}, or
101use \class{FunctionTestCase}.
102
103An instance of a \class{TestCase}-derived class is an object that can
104completely run a single test method, together with optional set-up
105and tidy-up code.
106
107The testing code of a \class{TestCase} instance should be entirely
108self contained, such that it can be run either in isolation or in
109arbitrary combination with any number of other test cases.
110
111The simplest test case subclass will simply override the
112\method{runTest()} method in order to perform specific testing code:
113
114\begin{verbatim}
115import unittest
116
117class DefaultWidgetSizeTestCase(unittest.TestCase):
118 def runTest(self):
119 widget = Widget("The widget")
Fred Drake62a26692001-04-12 19:34:38 +0000120 self.failUnless(widget.size() == (50,50), 'incorrect default size')
Fred Drake0056a422001-04-12 04:50:06 +0000121\end{verbatim}
122
Fred Drake62a26692001-04-12 19:34:38 +0000123Note that in order to test something, we use the one of the
124\method{assert*()} or \method{fail*()} methods provided by the
125\class{TestCase} base class. If the test fails when the test case
126runs, an exception will be raised, and the testing framework will
127identify the test case as a \dfn{failure}. Other exceptions that do
128not arise from checks made through the \method{assert*()} and
129\method{fail*()} methods are identified by the testing framework as
130dfn{errors}.
Fred Drake0056a422001-04-12 04:50:06 +0000131
132The way to run a test case will be described later. For now, note
133that to construct an instance of such a test case, we call its
134constructor without arguments:
135
136\begin{verbatim}
137testCase = DefaultWidgetSizeTestCase()
138\end{verbatim}
139
140Now, such test cases can be numerous, and their set-up can be
141repetitive. In the above case, constructing a ``Widget'' in each of
142100 Widget test case subclasses would mean unsightly duplication.
143
144Luckily, we can factor out such set-up code by implementing a method
145called \method{setUp()}, which the testing framework will
146automatically call for us when we run the test:
147
148\begin{verbatim}
149import unittest
150
151class SimpleWidgetTestCase(unittest.TestCase):
152 def setUp(self):
153 self.widget = Widget("The widget")
154
155class DefaultWidgetSizeTestCase(SimpleWidgetTestCase):
156 def runTest(self):
Fred Drake62a26692001-04-12 19:34:38 +0000157 self.failUnless(self.widget.size() == (50,50),
158 'incorrect default size')
Fred Drake0056a422001-04-12 04:50:06 +0000159
160class WidgetResizeTestCase(SimpleWidgetTestCase):
161 def runTest(self):
162 self.widget.resize(100,150)
Fred Drake62a26692001-04-12 19:34:38 +0000163 self.failUnless(self.widget.size() == (100,150),
164 'wrong size after resize')
Fred Drake0056a422001-04-12 04:50:06 +0000165\end{verbatim}
166
167If the \method{setUp()} method raises an exception while the test is
168running, the framework will consider the test to have suffered an
169error, and the \method{runTest()} method will not be executed.
170
171Similarly, we can provide a \method{tearDown()} method that tidies up
172after the \method{runTest()} method has been run:
173
174\begin{verbatim}
175import unittest
176
177class SimpleWidgetTestCase(unittest.TestCase):
178 def setUp(self):
179 self.widget = Widget("The widget")
180
181 def tearDown(self):
182 self.widget.dispose()
183 self.widget = None
184\end{verbatim}
185
186If \method{setUp()} succeeded, the \method{tearDown()} method will be
187run regardless of whether or not \method{runTest()} succeeded.
188
189Such a working environment for the testing code is called a
190\dfn{fixture}.
191
192Often, many small test cases will use the same fixture. In this case,
193we would end up subclassing \class{SimpleWidgetTestCase} into many
194small one-method classes such as
195\class{DefaultWidgetSizeTestCase}. This is time-consuming and
196discouraging, so in the same vein as JUnit, PyUnit provides a simpler
197mechanism:
198
199\begin{verbatim}
200import unittest
201
202class WidgetTestCase(unittest.TestCase):
203 def setUp(self):
204 self.widget = Widget("The widget")
205
206 def tearDown(self):
207 self.widget.dispose()
208 self.widget = None
209
210 def testDefaultSize(self):
Fred Drake62a26692001-04-12 19:34:38 +0000211 self.failUnless(self.widget.size() == (50,50),
212 'incorrect default size')
Fred Drake0056a422001-04-12 04:50:06 +0000213
214 def testResize(self):
215 self.widget.resize(100,150)
Fred Drake62a26692001-04-12 19:34:38 +0000216 self.failUnless(self.widget.size() == (100,150),
217 'wrong size after resize')
Fred Drake0056a422001-04-12 04:50:06 +0000218\end{verbatim}
219
220Here we have not provided a \method{runTest()} method, but have
221instead provided two different test methods. Class instances will now
222each run one of the \method{test*()} methods, with \code{self.widget}
223created and destroyed separately for each instance. When creating an
224instance we must specify the test method it is to run. We do this by
225passing the method name in the constructor:
226
227\begin{verbatim}
228defaultSizeTestCase = WidgetTestCase("testDefaultSize")
229resizeTestCase = WidgetTestCase("testResize")
230\end{verbatim}
231
232Test case instances are grouped together according to the features
233they test. PyUnit provides a mechanism for this: the \class{test
234suite}, represented by the class \class{TestSuite} in the
235\refmodule{unittest} module:
236
237\begin{verbatim}
238widgetTestSuite = unittest.TestSuite()
239widgetTestSuite.addTest(WidgetTestCase("testDefaultSize"))
240widgetTestSuite.addTest(WidgetTestCase("testResize"))
241\end{verbatim}
242
243For the ease of running tests, as we will see later, it is a good
244idea to provide in each test module a callable object that returns a
245pre-built test suite:
246
247\begin{verbatim}
248def suite():
249 suite = unittest.TestSuite()
250 suite.addTest(WidgetTestCase("testDefaultSize"))
251 suite.addTest(WidgetTestCase("testResize"))
252 return suite
253\end{verbatim}
254
255or even:
256
257\begin{verbatim}
258class WidgetTestSuite(unittest.TestSuite):
259 def __init__(self):
260 unittest.TestSuite.__init__(self,map(WidgetTestCase,
261 ("testDefaultSize",
262 "testResize")))
263\end{verbatim}
264
265(The latter is admittedly not for the faint-hearted!)
266
267Since it is a common pattern to create a \class{TestCase} subclass
268with many similarly named test functions, there is a convenience
269function called \function{makeSuite()} provided in the
270\refmodule{unittest} module that constructs a test suite that
271comprises all of the test cases in a test case class:
272
273\begin{verbatim}
274suite = unittest.makeSuite(WidgetTestCase,'test')
275\end{verbatim}
276
277Note that when using the \function{makeSuite()} function, the order in
278which the various test cases will be run by the test suite is the
279order determined by sorting the test function names using the
280\function{cmp()} built-in function.
281
282Often it is desirable to group suites of test cases together, so as to
283run tests for the whole system at once. This is easy, since
284\class{TestSuite} instances can be added to a \class{TestSuite} just
285as \class{TestCase} instances can be added to a \class{TestSuite}:
286
287\begin{verbatim}
288suite1 = module1.TheTestSuite()
289suite2 = module2.TheTestSuite()
290alltests = unittest.TestSuite((suite1, suite2))
291\end{verbatim}
292
293You can place the definitions of test cases and test suites in the
294same modules as the code they are to test (e.g.\ \file{widget.py}),
295but there are several advantages to placing the test code in a
296separate module, such as \file{widgettests.py}:
297
298\begin{itemize}
299 \item The test module can be run standalone from the command line.
300 \item The test code can more easily be separated from shipped code.
301 \item There is less temptation to change test code to fit the code.
302 it tests without a good reason.
303 \item Test code should be modified much less frequently than the
304 code it tests.
305 \item Tested code can be refactored more easily.
306 \item Tests for modules written in C must be in separate modules
307 anyway, so why not be consistent?
308 \item If the testing strategy changes, there is no need to change
309 the source code.
310\end{itemize}
311
Fred Drakeb9ad2282001-04-07 05:41:39 +0000312
313\subsection{Re-using old test code
314 \label{legacy-unit-tests}}
315
316Some users will find that they have existing test code that they would
317like to run from PyUnit, without converting every old test function to
318a \class{TestCase} subclass.
319
320For this reason, PyUnit provides a \class{FunctionTestCase} class.
321This subclass of \class{TestCase} can be used to wrap an existing test
322function. Set-up and tear-down functions can also optionally be
323wrapped.
324
325Given the following test function:
326
327\begin{verbatim}
328def testSomething():
329 something = makeSomething()
330 assert something.name is not None
331 # ...
332\end{verbatim}
333
334one can create an equivalent test case instance as follows:
335
336\begin{verbatim}
337testcase = unittest.FunctionTestCase(testSomething)
338\end{verbatim}
339
340If there are additional set-up and tear-down methods that should be
341called as part of the test case's operation, they can also be provided:
342
343\begin{verbatim}
344testcase = unittest.FunctionTestCase(testSomething,
345 setUp=makeSomethingDB,
346 tearDown=deleteSomethingDB)
347\end{verbatim}
348
Fred Drake0aa811c2001-10-20 04:24:09 +0000349\note{PyUnit supports the use of \exception{AssertionError}
Fred Drake0056a422001-04-12 04:50:06 +0000350as an indicator of test failure, but does not recommend it. Future
Fred Drake0aa811c2001-10-20 04:24:09 +0000351versions may treat \exception{AssertionError} differently.}
Fred Drake0056a422001-04-12 04:50:06 +0000352
353
Fred Drakeb9ad2282001-04-07 05:41:39 +0000354\subsection{Classes and functions
355 \label{unittest-contents}}
356
357\begin{classdesc}{TestCase}{}
358 Instances of the \class{TestCase} class represent the smallest
359 testable units in a set of tests. This class is intended to be used
360 as a base class, with specific tests being implemented by concrete
361 subclasses. This class implements the interface needed by the test
362 runner to allow it to drive the test, and methods that the test code
363 can use to check for and report various kinds of failures.
364\end{classdesc}
365
366\begin{classdesc}{FunctionTestCase}{testFunc\optional{,
Fred Drake62a26692001-04-12 19:34:38 +0000367 setUp\optional{, tearDown\optional{, description}}}}
Fred Drakeb9ad2282001-04-07 05:41:39 +0000368 This class implements the portion of the \class{TestCase} interface
369 which allows the test runner to drive the test, but does not provide
370 the methods which test code can use to check and report errors.
371 This is used to create test cases using legacy test code, allowing
372 it to be integrated into a \refmodule{unittest}-based test
373 framework.
374\end{classdesc}
375
Fred Drake29be7012001-04-10 22:25:06 +0000376\begin{classdesc}{TestSuite}{\optional{tests}}
Fred Drakeb9ad2282001-04-07 05:41:39 +0000377 This class represents an aggregation of individual tests cases and
378 test suites. The class presents the interface needed by the test
379 runner to allow it to be run as any other test case, but all the
380 contained tests and test suites are executed. Additional methods
Fred Drake29be7012001-04-10 22:25:06 +0000381 are provided to add test cases and suites to the aggregation. If
382 \var{tests} is given, it must be a sequence of individual tests that
383 will be added to the suite.
Fred Drakeb9ad2282001-04-07 05:41:39 +0000384\end{classdesc}
385
386\begin{classdesc}{TestLoader}{}
Fred Drake29be7012001-04-10 22:25:06 +0000387 This class is responsible for loading tests according to various
388 criteria and returning them wrapped in a \class{TestSuite}.
389 It can load all tests within a given module or \class{TestCase}
390 class. When loading from a module, it considers all
391 \class{TestCase}-derived classes. For each such class, it creates
392 an instance for each method with a name beginning with the string
393 \samp{test}.
Fred Drakeb9ad2282001-04-07 05:41:39 +0000394\end{classdesc}
395
Fred Drake62a26692001-04-12 19:34:38 +0000396\begin{datadesc}{defaultTestLoader}
397 Instance of the \class{TestLoader} class which can be shared. If no
398 customization of the \class{TestLoader} is needed, this instance can
399 always be used instead of creating new instances.
400\end{datadesc}
401
Fred Drakeb9ad2282001-04-07 05:41:39 +0000402\begin{classdesc}{TextTestRunner}{\optional{stream\optional{,
403 descriptions\optional{, verbosity}}}}
Fred Drake29be7012001-04-10 22:25:06 +0000404 A basic test runner implementation which prints results on standard
405 output. It has a few configurable parameters, but is essentially
406 very simple. Graphical applications which run test suites should
407 provide alternate implementations.
Fred Drakeb9ad2282001-04-07 05:41:39 +0000408\end{classdesc}
409
410\begin{funcdesc}{main}{\optional{module\optional{,
411 defaultTest\optional{, argv\optional{,
412 testRunner\optional{, testRunner}}}}}}
Fred Drake0056a422001-04-12 04:50:06 +0000413 A command-line program that runs a set of tests; this is primarily
414 for making test modules conveniently executable. The simplest use
415 for this function is:
Fred Drakeb9ad2282001-04-07 05:41:39 +0000416
417\begin{verbatim}
418if __name__ == '__main__':
419 unittest.main()
420\end{verbatim}
421\end{funcdesc}
422
423
424\subsection{TestCase Objects
425 \label{testcase-objects}}
426
Fred Drake29be7012001-04-10 22:25:06 +0000427Each \class{TestCase} instance represents a single test, but each
428concrete subclass may be used to define multiple tests --- the
429concrete class represents a single test fixture. The fixture is
430created and cleaned up for each test case.
431
432\class{TestCase} instances provide three groups of methods: one group
433used to run the test, another used by the test implementation to
434check conditions and report failures, and some inquiry methods
435allowing information about the test itself to be gathered.
436
437Methods in the first group are:
438
439\begin{methoddesc}[TestCase]{setUp}{}
440 Method called to prepare the test fixture. This is called
441 immediately before calling the test method; any exception raised by
442 this method will be considered an error rather than a test failure.
443 The default implementation does nothing.
444\end{methoddesc}
445
Fred Drake29be7012001-04-10 22:25:06 +0000446\begin{methoddesc}[TestCase]{tearDown}{}
447 Method called immediately after the test method has been called and
448 the result recorded. This is called even if the test method raised
449 an exception, so the implementation in subclasses may need to be
450 particularly careful about checking internal state. Any exception
451 raised by this method will be considered an error rather than a test
Fred Drake62a26692001-04-12 19:34:38 +0000452 failure. This method will only be called if the \method{setUp()}
453 succeeds, regardless of the outcome of the test method.
454 The default implementation does nothing.
455\end{methoddesc}
456
457\begin{methoddesc}[TestCase]{run}{\optional{result}}
458 Run the test, collecting the result into the test result object
459 passed as \var{result}. If \var{result} is omitted or \code{None},
460 a temporary result object is created and used, but is not made
461 available to the caller. This is equivalent to simply calling the
462 \class{TestCase} instance.
Fred Drake29be7012001-04-10 22:25:06 +0000463\end{methoddesc}
464
465\begin{methoddesc}[TestCase]{debug}{}
466 Run the test without collecting the result. This allows exceptions
467 raised by the test to be propogated to the caller, and can be used
468 to support running tests under a debugger.
469\end{methoddesc}
470
471
Fred Drake0056a422001-04-12 04:50:06 +0000472The test code can use any of the following methods to check for and
Fred Drake62a26692001-04-12 19:34:38 +0000473report failures.
Fred Drake29be7012001-04-10 22:25:06 +0000474
Fred Drake62a26692001-04-12 19:34:38 +0000475\begin{methoddesc}[TestCase]{assert_}{expr\optional{, msg}}
476\methodline{failUnless}{expr\optional{, msg}}
477 Signal a test failure if \var{expr} is false; the explanation for
478 the error will be \var{msg} if given, otherwise it will be
479 \code{None}.
Fred Drake29be7012001-04-10 22:25:06 +0000480\end{methoddesc}
481
Fred Drake62a26692001-04-12 19:34:38 +0000482\begin{methoddesc}[TestCase]{assertEqual}{first, second\optional{, msg}}
483\methodline{failUnlessEqual}{first, second\optional{, msg}}
Fred Drake29be7012001-04-10 22:25:06 +0000484 Test that \var{first} and \var{second} are equal. If the values do
485 not compare equal, the test will fail with the explanation given by
Fred Drake0056a422001-04-12 04:50:06 +0000486 \var{msg}, or \code{None}. Note that using \method{failUnlessEqual()}
Fred Drake29be7012001-04-10 22:25:06 +0000487 improves upon doing the comparison as the first parameter to
Fred Drake62a26692001-04-12 19:34:38 +0000488 \method{failUnless()}: the default value for \var{msg} can be
Fred Drake29be7012001-04-10 22:25:06 +0000489 computed to include representations of both \var{first} and
490 \var{second}.
491\end{methoddesc}
492
Fred Drake62a26692001-04-12 19:34:38 +0000493\begin{methoddesc}[TestCase]{assertNotEqual}{first, second\optional{, msg}}
494\methodline{failIfEqual}{first, second\optional{, msg}}
Fred Drake29be7012001-04-10 22:25:06 +0000495 Test that \var{first} and \var{second} are not equal. If the values
496 do compare equal, the test will fail with the explanation given by
Fred Drake0056a422001-04-12 04:50:06 +0000497 \var{msg}, or \code{None}. Note that using \method{failIfEqual()}
Fred Drake29be7012001-04-10 22:25:06 +0000498 improves upon doing the comparison as the first parameter to
499 \method{failUnless()} is that the default value for \var{msg} can be
500 computed to include representations of both \var{first} and
501 \var{second}.
502\end{methoddesc}
503
Fred Drake62a26692001-04-12 19:34:38 +0000504\begin{methoddesc}[TestCase]{assertRaises}{exception, callable, \moreargs}
505\methodline{failUnlessRaises}{exception, callable, \moreargs}
506 Test that an exception is raised when \var{callable} is called with
507 any positional or keyword arguments that are also passed to
508 \method{assertRaises()}. The test passes if \var{exception} is
509 raised, is an error if another exception is raised, or fails if no
510 exception is raised. To catch any of a group of exceptions, a tuple
511 containing the exception classes may be passed as \var{exception}.
512\end{methoddesc}
513
Fred Drake29be7012001-04-10 22:25:06 +0000514\begin{methoddesc}[TestCase]{failIf}{expr\optional{, msg}}
Fred Drake0056a422001-04-12 04:50:06 +0000515 The inverse of the \method{failUnless()} method is the
Fred Drake62a26692001-04-12 19:34:38 +0000516 \method{failIf()} method. This signals a test failure if \var{expr}
517 is true, with \var{msg} or \code{None} for the error message.
Fred Drake29be7012001-04-10 22:25:06 +0000518\end{methoddesc}
519
520\begin{methoddesc}[TestCase]{fail}{\optional{msg}}
Fred Drake62a26692001-04-12 19:34:38 +0000521 Signals a test failure unconditionally, with \var{msg} or
522 \code{None} for the error message.
Fred Drake29be7012001-04-10 22:25:06 +0000523\end{methoddesc}
524
Fred Drake62a26692001-04-12 19:34:38 +0000525\begin{memberdesc}[TestCase]{failureException}
526 This class attribute gives the exception raised by the
527 \method{test()} method. If a test framework needs to use a
528 specialized exception, possibly to carry additional information, it
529 must subclass this exception in order to ``play fair'' with the
530 framework. The initial value of this attribute is
531 \exception{AssertionError}.
532\end{memberdesc}
533
Fred Drake29be7012001-04-10 22:25:06 +0000534
535Testing frameworks can use the following methods to collect
536information on the test:
537
538\begin{methoddesc}[TestCase]{countTestCases}{}
539 Return the number of tests represented by the this test object. For
540 \class{TestCase} instances, this will always be \code{1}, but this
541 method is also implemented by the \class{TestSuite} class, which can
542 return larger values.
543\end{methoddesc}
544
545\begin{methoddesc}[TestCase]{defaultTestResult}{}
546 Return the default type of test result object to be used to run this
547 test.
548\end{methoddesc}
549
550\begin{methoddesc}[TestCase]{id}{}
551 Return a string identifying the specific test case. This is usually
552 the full name of the test method, including the module and class
553 names.
554\end{methoddesc}
555
556\begin{methoddesc}[TestCase]{shortDescription}{}
557 Returns a one-line description of the test, or \code{None} if no
558 description has been provided. The default implementation of this
559 method returns the first line of the test method's docstring, if
560 available, or \code{None}.
561\end{methoddesc}
562
Fred Drakeb9ad2282001-04-07 05:41:39 +0000563
564\subsection{TestSuite Objects
565 \label{testsuite-objects}}
566
567\class{TestSuite} objects behave much like \class{TestCase} objects,
568except they do not actually implement a test. Instead, they are used
569to aggregate tests into groups that should be run together. Some
570additional methods are available to add tests to \class{TestSuite}
571instances:
572
573\begin{methoddesc}[TestSuite]{addTest}{test}
574 Add a \class{TestCase} or \class{TestSuite} to the set of tests that
575 make up the suite.
576\end{methoddesc}
577
578\begin{methoddesc}[TestSuite]{addTests}{tests}
579 Add all the tests from a sequence of \class{TestCase} and
580 \class{TestSuite} instances to this test suite.
581\end{methoddesc}
582
Fred Drake4d17b302001-09-06 15:51:56 +0000583The \method{run()} method is also slightly different:
584
585\begin{methoddesc}[TestSuite]{run}{result}
586 Run the tests associated with this suite, collecting the result into
587 the test result object passed as \var{result}. Note that unlike
588 \method{TestCase.run()}, \method{TestSuite.run()} requires the
589 result object to be passed in.
590\end{methoddesc}
591
592In the typical usage of a \class{TestSuite} object, the \method{run()}
593method is invoked by a \class{TestRunner} rather than by the end-user
594test harness.
595
Fred Drakeb9ad2282001-04-07 05:41:39 +0000596
597\subsection{TestResult Objects
598 \label{testresult-objects}}
599
600A \class{TestResult} object stores the results of a set of tests. The
601\class{TestCase} and \class{TestSuite} classes ensure that results are
602properly stored; test authors do not need to worry about recording the
603outcome of tests.
604
605Testing frameworks built on top of \refmodule{unittest} may want
606access to the \class{TestResult} object generated by running a set of
607tests for reporting purposes; a \class{TestResult} instance is
608returned by the \method{TestRunner.run()} method for this purpose.
609
610Each instance holds the total number of tests run, and collections of
611failures and errors that occurred among those test runs. The
612collections contain tuples of \code{(\var{testcase},
Fred Drake387c8b52002-07-02 22:34:44 +0000613\var{traceback})}, where \var{traceback} is a string containing a
614formatted version of the traceback for the exception.
Fred Drakeb9ad2282001-04-07 05:41:39 +0000615
616\class{TestResult} instances have the following attributes that will
617be of interest when inspecting the results of running a set of tests:
618
619\begin{memberdesc}[TestResult]{errors}
620 A list containing pairs of \class{TestCase} instances and the
Fred Drake387c8b52002-07-02 22:34:44 +0000621 formatted tracebacks for tests which raised an exception but did not
622 signal a test failure.
Fred Drakec4126172002-07-02 22:46:42 +0000623 \versionchanged[Contains formatted tracebacks instead of
624 \function{sys.exc_info()} results]{2.2}
Fred Drakeb9ad2282001-04-07 05:41:39 +0000625\end{memberdesc}
626
627\begin{memberdesc}[TestResult]{failures}
628 A list containing pairs of \class{TestCase} instances and the
Fred Drake387c8b52002-07-02 22:34:44 +0000629 formatted tracebacks for tests which signalled a failure in the code
630 under test.
Fred Drakec4126172002-07-02 22:46:42 +0000631 \versionchanged[Contains formatted tracebacks instead of
632 \function{sys.exc_info()} results]{2.2}
Fred Drakeb9ad2282001-04-07 05:41:39 +0000633\end{memberdesc}
634
635\begin{memberdesc}[TestResult]{testsRun}
636 The number of tests which have been started.
637\end{memberdesc}
638
639\begin{methoddesc}[TestResult]{wasSuccessful}{}
640 Returns true if all tests run so far have passed, otherwise returns
641 false.
642\end{methoddesc}
643
644
645The following methods of the \class{TestResult} class are used to
646maintain the internal data structures, and mmay be extended in
647subclasses to support additional reporting requirements. This is
Fred Drake8ee679f2001-07-14 02:50:55 +0000648particularly useful in building tools which support interactive
Fred Drakeb9ad2282001-04-07 05:41:39 +0000649reporting while tests are being run.
650
651\begin{methoddesc}[TestResult]{startTest}{test}
652 Called when the test case \var{test} is about to be run.
653\end{methoddesc}
654
655\begin{methoddesc}[TestResult]{stopTest}{test}
656 Called when the test case \var{test} has been executed, regardless
657 of the outcome.
658\end{methoddesc}
659
660\begin{methoddesc}[TestResult]{addError}{test, err}
Fred Drake62a26692001-04-12 19:34:38 +0000661 Called when the test case \var{test} raises an exception without
662 signalling a test failure. \var{err} is a tuple of the form
663 returned by \function{sys.exc_info()}: \code{(\var{type},
664 \var{value}, \var{traceback})}.
Fred Drakeb9ad2282001-04-07 05:41:39 +0000665\end{methoddesc}
666
667\begin{methoddesc}[TestResult]{addFailure}{test, err}
Fred Drake62a26692001-04-12 19:34:38 +0000668 Called when the test case \var{test} signals a failure.
Fred Drake0056a422001-04-12 04:50:06 +0000669 \var{err} is a tuple of the form returned by
670 \function{sys.exc_info()}: \code{(\var{type}, \var{value},
671 \var{traceback})}.
Fred Drakeb9ad2282001-04-07 05:41:39 +0000672\end{methoddesc}
673
674\begin{methoddesc}[TestResult]{addSuccess}{test}
675 This method is called for a test that does not fail; \var{test} is
676 the test case object.
677\end{methoddesc}
678
679
680One additional method is available for \class{TestResult} objects:
681
682\begin{methoddesc}[TestResult]{stop}{}
683 This method can be called to signal that the set of tests being run
684 should be aborted. Once this has been called, the
685 \class{TestRunner} object return to its caller without running any
686 additional tests. This is used by the \class{TextTestRunner} class
687 to stop the test framework when the user signals an interrupt from
Fred Drake8ee679f2001-07-14 02:50:55 +0000688 the keyboard. Interactive tools which provide runners can use this
689 in a similar manner.
Fred Drakeb9ad2282001-04-07 05:41:39 +0000690\end{methoddesc}
Fred Drake62a26692001-04-12 19:34:38 +0000691
692
693\subsection{TestLoader Objects
694 \label{testloader-objects}}
695
696The \class{TestLoader} class is used to create test suites from
697classes and modules. Normally, there is no need to create an instance
698of this class; the \refmodule{unittest} module provides an instance
699that can be shared as the \code{defaultTestLoader} module attribute.
700Using a subclass or instance would allow customization of some
701configurable properties.
702
703\class{TestLoader} objects have the following methods:
704
705\begin{methoddesc}[TestLoader]{loadTestsFromTestCase}{testCaseClass}
706 Return a suite of all tests cases contained in the
707 \class{TestCase}-derived class \class{testCaseClass}.
708\end{methoddesc}
709
710\begin{methoddesc}[TestLoader]{loadTestsFromModule}{module}
711 Return a suite of all tests cases contained in the given module.
712 This method searches \var{module} for classes derived from
713 \class{TestCase} and creates an instance of the class for each test
714 method defined for the class.
715
Fred Drake0aa811c2001-10-20 04:24:09 +0000716 \warning{While using a hierarchy of
Fred Drake62a26692001-04-12 19:34:38 +0000717 \class{Testcase}-derived classes can be convenient in sharing
718 fixtures and helper functions, defining test methods on base classes
719 that are not intended to be instantiated directly does not play well
720 with this method. Doing so, however, can be useful when the
Fred Drake0aa811c2001-10-20 04:24:09 +0000721 fixtures are different and defined in subclasses.}
Fred Drake62a26692001-04-12 19:34:38 +0000722\end{methoddesc}
723
724\begin{methoddesc}[TestLoader]{loadTestsFromName}{name\optional{, module}}
725 Return a suite of all tests cases given a string specifier.
726
Fred Drake4d17b302001-09-06 15:51:56 +0000727 The specifier \var{name} is a ``dotted name'' that may resolve
728 either to a module, a test case class, a test method within a test
729 case class, or a callable object which returns a \class{TestCase} or
730 \class{TestSuite} instance. For example, if you have a module
731 \module{SampleTests} containing a \class{TestCase}-derived class
732 \class{SampleTestCase} with three test methods (\method{test_one()},
733 \method{test_two()}, and \method{test_three()}), the specifier
734 \code{'SampleTests.SampleTestCase'} would cause this method to
735 return a suite which will run all three test methods. Using the
736 specifier \code{'SampleTests.SampleTestCase.test_two'} would cause
737 it to return a test suite which will run only the
738 \method{test_two()} test method. The specifier can refer to modules
739 and packages which have not been imported; they will be imported as
740 a side-effect.
Fred Drake62a26692001-04-12 19:34:38 +0000741
742 The method optionally resolves \var{name} relative to a given module.
743\end{methoddesc}
744
745\begin{methoddesc}[TestLoader]{loadTestsFromNames}{names\optional{, module}}
746 Similar to \method{loadTestsFromName()}, but takes a sequence of
747 names rather than a single name. The return value is a test suite
748 which supports all the tests defined for each name.
749\end{methoddesc}
750
751\begin{methoddesc}[TestLoader]{getTestCaseNames}{testCaseClass}
752 Return a sorted sequence of method names found within
753 \var{testCaseClass}.
754\end{methoddesc}
755
756
757The following attributes of a \class{TestLoader} can be configured
758either by subclassing or assignment on an instance:
759
760\begin{memberdesc}[TestLoader]{testMethodPrefix}
761 String giving the prefix of method names which will be interpreted
762 as test methods. The default value is \code{'test'}.
763\end{memberdesc}
764
765\begin{memberdesc}[TestLoader]{sortTestMethodsUsing}
766 Function to be used to compare method names when sorting them in
767 \method{getTestCaseNames()}. The default value is the built-in
768 \function{cmp()} function; it can be set to \code{None} to disable
769 the sort.
770\end{memberdesc}
771
772\begin{memberdesc}[TestLoader]{suiteClass}
773 Callable object that constructs a test suite from a list of tests.
774 No methods on the resulting object are needed. The default value is
775 the \class{TestSuite} class.
776\end{memberdesc}
Fred Drake387c8b52002-07-02 22:34:44 +0000777
778
779\subsection{Getting Extended Error Information
780 \label{unittest-error-info}}
781
782Some applications can make use of more error information (for example,
783an integrated development environment, or IDE). Such an application
784can retrieve supplemental information about errors and failures by
785using an alternate \class{TestResult} implementation, and extending
786the \method{defaultTestResult()} method of the \class{TestCase} class
787to provide it.
788
789Here is a brief example of a \class{TestResult} subclass which stores
790the actual exception and traceback objects. (Be aware that storing
791traceback objects can cause a great deal of memory not to be reclaimed
792when it otherwise would be, which can have effects that affect the
793behavior of the tests.)
794
795\begin{verbatim}
796import unittest
797
798class MyTestCase(unittest.TestCase):
799 def defaultTestResult(self):
800 return MyTestResult()
801
802class MyTestResult(unittest.TestResult):
803 def __init__(self):
804 self.errors_tb = []
805 self.failures_tb = []
806
807 def addError(self, test, err):
808 self.errors_tb.append((test, err))
809 unittest.TestResult.addError(self, test, err)
810
811 def addFailure(self, test, err):
812 self.failures_tb.append((test, err))
813 unittest.TestResult.addFailure(self, test, err)
814\end{verbatim}
815
816Tests written using \class{MyTestCase} as the base class, instead of
817\class{TestCase}, will allow tools to extract additional information
818from the results object.