根据不同的命令行参数进行不同代码的单元测试。
Running a subset of test case methods
Sometimes it's convenient to run only a subset of test methods in a given test case. This recipe
will show how to run either the whole test case, or pick a subset from the command line.
1. Create a new file named recipe4.py in which to put all the code for this recipe.
2. Pick a class to test. In this case, we will use our Roman numeral converter.
3. Create a test class using the same name as the class under test with Test appended
to the end.
4. Create several test methods.
5. Write a main runner that either runs the entire test case or accepts a variable
number of test methods.
6. Run the recipe with no extra command-line arguments, and see it run all the tests.
Also run it with a test method name, and see it run only the specified test method.
测试代码:
Code # !usr/bin/env python 2.7 # coding: utf-8 # filename: recipe4.py class RomanNumeralConverter(object): def __init__(self, roman_numeral): self.roman_numeral = roman_numeral self.digit_map = {"M":1000, "D":500, "C":100, "L":50, "X":10, "V":5, "I":1} def convert_to_decimal(self): val = 0 for char in self.roman_numeral: val += self.digit_map[char] return val import unittest class RomanNumeralConverterTest(unittest.TestCase): def test_parsing_millenia(self): value = RomanNumeralConverter("M") self.assertEquals(1000, value.convert_to_decimal()) def test_parsing_century(self): value = RomanNumeralConverter("C") self.assertEquals(100, value.convert_to_decimal()) if __name__ == "__main__": import sys suite = unittest.TestSuite() if len(sys.argv) == 1: suite = unittest.TestLoader().loadTestsFromTestCase(\ RomanNumeralConverterTest) else: for test_name in sys.argv[1:]: suite.addTest(\ RomanNumeralConverterTest(test_name)) unittest.TextTestRunner(verbosity=2).run(suite)
运行测试代码,我们发现根据不同的命令行参数,会进行不同代码的测试。
在命令行中进行调用可分4种情况。
1、输入:python recipe4.py
输出:
test_parsing_century (__main__.RomanNumeralConverterTest) ... ok
test_parsing_millenia (__main__.RomanNumeralConverterTest) ... ok
----------------------------------------------------------------------
Ran 2 tests in 0.001s
OK
2、输入:python recipe4.py test_parsing_century
输出:
test_parsing_century (__main__.RomanNumeralConverterTest) ... ok
----------------------------------------------------------------------
Ran 1 test in 0.000s
OK
3、输入:python recipe4.py test_parsing_millenia
输出:
test_parsing_millenia (__main__.RomanNumeralConverterTest) ... ok
----------------------------------------------------------------------
Ran 1 test in 0.000s
OK
4、输入:python recipe4.py test_parsing_millenia test_parsing_century
输出:
test_parsing_millenia (__main__.RomanNumeralConverterTest) ... ok
test_parsing_century (__main__.RomanNumeralConverterTest) ... ok
----------------------------------------------------------------------
Ran 2 tests in 0.000s
OK