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.
The following steps show how to code a command-line script to run subsets of tests:
recipe4.py
in which to put all the code for this recipe.Roman
numeral
converter
.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
Test
appended to the end.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)
For this test case, we coded a couple of test methods. But instead of simply running all the tests, or defining a fixed list, we used Python's sys
library to parse the command-line arguments. If there are no extra arguments, it runs the entire test case. If there are extra arguments, then they are assumed to be test method names. It uses unittest's inbuilt ability to specify test method names when instantiating RomanNumeralConverterTest
.
18.119.28.108