python-unittest(6)

來源:互聯網
上載者:User

在測試模組中定義測試套件

Defining test suites inside the test module.

Each test module can provide one or more methods that define a different test suite. One
method can exercise all the tests in a given module; another method can define a particular
subset.

1. Create a new file called recipe6.py in which to put our 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. Write a series of test methods, including a setUp method that creates a new
instance of the RomanNumeralConverter for each test method.

5. Create some methods in the recipe's module (but not in the test case) that define
different test suites.

6. Create a runner that will iterate over each of these test suites and run them through
unittest's TextTestRunner.

7. Run the combination of test suites, and see the results.

測試代碼:

Codeclass 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 valimport unittestclass 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"))    def test_parsing_half_century(self):        self.assertEquals(50, \                          self.cvt.convert_to_decimal("L"))    def test_parsing_decade(self):        self.assertEquals(10, \                          self.cvt.convert_to_decimal("X"))    def test_parsing_half_decade(self):        self.assertEquals(5, self.cvt.convert_to_decimal("V"))    def test_parsing_one(self):        self.assertEquals(1, self.cvt.convert_to_decimal("I"))    def test_empty_roman_numeral(self):        self.assertTrue(self.cvt.convert_to_decimal("") == 0)        self.assertFalse(self.cvt.convert_to_decimal("") > 0)    def test_no_roman_numeral(self):        self.assertRaises(TypeError, \                          self.cvt.convert_to_decimal, None)    def test_combo1(self):        self.assertEquals(4000, \                          self.cvt.convert_to_decimal("MMMM"))    def test_combo2(self):        self.assertEquals(2010, \                          self.cvt.convert_to_decimal("MMX"))    def test_combo3(self):        self.assertEquals(4668, \                self.cvt.convert_to_decimal("MMMMDCLXVIII"))def high_and_low():    suite = unittest.TestSuite()    suite.addTest(\       RomanNumeralConverterTest("test_parsing_millenia"))    suite.addTest(\       RomanNumeralConverterTest("test_parsing_one"))    return suitedef combos():    return unittest.TestSuite(map(RomanNumeralConverterTest,\              ["test_combo1", "test_combo2", "test_combo3"]))def all():    return unittest.TestLoader().loadTestsFromTestCase(\                               RomanNumeralConverterTest)if __name__ == "__main__":    for suite_func in [high_and_low, combos, all]:        print "Running test suite '%s'" % suite_func.func_name        suite = suite_func()        unittest.TextTestRunner(verbosity=2).run(suite)

 

輸出結果:

Running test suite 'high_and_low'
test_parsing_millenia (__main__.RomanNumeralConverterTest) ... ok
test_parsing_one (__main__.RomanNumeralConverterTest) ... ok

----------------------------------------------------------------------
Ran 2 tests in 0.000s

OK
Running test suite 'combos'
test_combo1 (__main__.RomanNumeralConverterTest) ... ok
test_combo2 (__main__.RomanNumeralConverterTest) ... ok
test_combo3 (__main__.RomanNumeralConverterTest) ... ok

----------------------------------------------------------------------
Ran 3 tests in 0.000s

OK
Running test suite 'all'
test_combo1 (__main__.RomanNumeralConverterTest) ... ok
test_combo2 (__main__.RomanNumeralConverterTest) ... ok
test_combo3 (__main__.RomanNumeralConverterTest) ... ok
test_empty_roman_numeral (__main__.RomanNumeralConverterTest) ... ok
test_no_roman_numeral (__main__.RomanNumeralConverterTest) ... ok
test_parsing_century (__main__.RomanNumeralConverterTest) ... ok
test_parsing_decade (__main__.RomanNumeralConverterTest) ... ok
test_parsing_half_century (__main__.RomanNumeralConverterTest) ... ok
test_parsing_half_decade (__main__.RomanNumeralConverterTest) ... ok
test_parsing_millenia (__main__.RomanNumeralConverterTest) ... ok
test_parsing_one (__main__.RomanNumeralConverterTest) ... ok

----------------------------------------------------------------------
Ran 11 tests in 0.001s

OK

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.