根據不同的命令列參數進行不同代碼的單元測試。
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.pyclass 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 valimport unittestclass 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