执行多个测试套件(suites)
Chaining together a suite of tests
Unittest makes it easy to chain together test cases into a TestSuite. A TestSuite can be run
just like a TestCase, but it also provides additional functionality to add a single test, multiple
tests, and count them.
1. Create a new file named recipe5.py in which to put our sample application and
test cases.
2. Pick a class to test. In this case, we will use our Roman numeral converter.
class RomanNumeralConverter(object):
3. Create two test classes with various test methods spread between them.
4. Create a test runner in a separate file named recipe5_runner.py that pulls in
both test cases.
5. Execute the test runner, and observe how tests are pulled in from both test cases.
测试代码:
Code
# !usr/bin/env python 2.7
# coding: utf-8
# filename: recipe5.py
class RomanNumeralConverter(object):
def __init__(self):
self.digit_map = {"M":1000, "D":500, "C":100, "L":50, "X":10, "V":5, "I":1}
def convert_to_decimal(self, roman_numeral):
val = 0
for char in roman_numeral:
val += self.digit_map[char]
return val
import unittest
class RomanNumeralConverterTest(unittest.TestCase):
def setUp(self):
self.cvt = RomanNumeralConverter()
def test_parsing_millenia(self):
self.assertEquals(1000, \
self.cvt.convert_to_decimal("M"))
def test_parsing_century(self):
self.assertEquals(100, \
self.cvt.convert_to_decimal("C"))
class RomanNumeralComboTest(unittest.TestCase):
def setUp(self):
self.cvt = RomanNumeralConverter()
def test_multi_millenia(self):
self.assertEquals(4000, \
self.cvt.convert_to_decimal("MMMM"))
def test_multi_add_up(self):
self.assertEquals(2010, \
self.cvt.convert_to_decimal("MMX"))
Code
# !usr/bin/env python 2.7
# coding: utf-8
# filename: recipe5_runner.py
if __name__ == "__main__":
import unittest
from recipe5 import *
suite1 = unittest.TestLoader().loadTestsFromTestCase( \
RomanNumeralConverterTest)
suite2 = unittest.TestLoader().loadTestsFromTestCase( \
RomanNumeralComboTest)
suite = unittest.TestSuite([suite1, suite2])
unittest.TextTestRunner(verbosity=2).run(suite)
运行结果:
test_parsing_century (recipe5.RomanNumeralConverterTest) ... ok
test_parsing_millenia (recipe5.RomanNumeralConverterTest) ... ok
test_multi_add_up (recipe5.RomanNumeralComboTest) ... ok
test_multi_millenia (recipe5.RomanNumeralComboTest) ... ok
----------------------------------------------------------------------
Ran 4 tests in 0.001s
OK