前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >python-unittest(6)

python-unittest(6)

作者头像
全栈程序员站长
发布2022-07-05 09:11:28
2710
发布2022-07-05 09:11:28
举报
文章被收录于专栏:全栈程序员必看

在测试模块中定义测试套件

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.

测试代码:

代码语言:javascript
复制
Code
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"))

    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 suite

def 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

发布者:全栈程序员栈长,转载请注明出处:https://javaforall.cn/110380.html原文链接:https://javaforall.cn

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2021年8月1,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档