python-unittest(6)

python-unittest(6)

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

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.

测试代码:

python-unittest(6)
python-unittest(6)

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.net/110380.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • 从零开始的大数据技术学习路线指南:带你轻松成为大数据开发工程师![通俗易懂]

    从零开始的大数据技术学习路线指南:带你轻松成为大数据开发工程师![通俗易懂]之前有不少小伙伴留言和私信我关于大数据学习路线,以及咨询我一些关于有工作经验想转行大数据的问题,只言片语也讲不清。我花了一个月整理了一份我当初学习的大数据学习路线,从最基础的大数据集群搭建开始,希望能帮助到大家。

    2022年5月23日
    41
  • CDO盛行,CIO作何应对?

    CDO盛行,CIO作何应对?

    2022年3月4日
    41
  • weex 在android模拟器,weex 启动 ios 模拟器

    前提需要的安装nodenpmweex-toolkitcocoaPods1.创建weex工程weexcreatehelloWolrd2.进入helloWolrd文件夹安装依赖,我用cnpminstall的话就会报错,这里最好用npminstallnpminstall3.添加ios应用weexplatfromaddios4.到platforms/ios目录下为ios工程用coc…

    2022年4月11日
    49
  • 关于代价函数的理解「建议收藏」

    关于代价函数的理解「建议收藏」假设拟合直线为,代价函数(costfunction)记为则代价函数:为什么代价函数是这个呢?首先思考:什么是代价?简单理解代价就是预测值和实际值之间的差距,那对于多个样本来说,就是差距之和。如果我们直接使用,这个公式看起来就是表示假设值和实际值只差,再将每一个样本的这个差值加起来不就是代价了吗,但是想一下,如果使用这个公式,那么就单个样本而言,代价有正有负,全部样本的代价加起来有可能正负

    2022年6月7日
    34
  • Php公众号40029,网页授权获取微信用户信息错误40029:不合法的oauth_code

    Php公众号40029,网页授权获取微信用户信息错误40029:不合法的oauth_code这几天测试刚完成的网页授权获取微信用户信息功能。在第一步:用户同意授权获取code,通过code获取access_token时,有时会出现40029错误。经过调试,发现问题出现在redirect_uri=REDIRECT_URI当跳转到授权链接后,微信会发出两次转向至redirect_uri的相同请求(两次带进来的code是相同的)。第一次的code后已经成功换取得openid以及access_t…

    2022年5月1日
    64
  • css经典布局——圣杯布局

    圣杯布局和双飞翼布局一直是前端面试的高频考点,圣杯布局的出现是来自由MatthewLevine在2006年写的一篇文章《InSearchoftheHolyGrail》。比起双飞翼布局,它的起源不是源于对页面的形象表达。在西方,圣杯是表达“渴求之物”的意思。而双飞翼布局则是源于淘宝的UED,可以说是灵感来自于页面渲染。效果图原本录制了…

    2022年4月4日
    72

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号