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)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • 微型计算机原理与接口技术课程代码,微型计算机原理与接口技术

    微型计算机原理与接口技术课程代码,微型计算机原理与接口技术课程代码:02205教材名称:微型计算机原理与接口技术学分:6分主编:徐骏善、朱岩出版社:机械工业出版社版次:2014年版开本:16开定价:36.00元适用专业A080306机电一体化工程教材简介:本书是全国高等教育自学考试机电一体化工程专业(专科)课指定教材,按照2014年新修订的该课程自学考试大纲编写。本书内容包括两部分:C语言程序设计,讲述C语…

    2022年10月2日
    3
  • voliate Synchronized Lock

    voliate Synchronized Lock参考文章:https://blog.csdn.net/huyiju/article/details/97126274一、voliate相关1:java内存模型1.1:计算机的内存模型在计算机的内存模型中cpu和内存之间的速度存在数量级所以引入了高速缓存,告诉缓存会导致到底以哪个处理器的缓存为主,同步到主内存,这个时候有有了缓存一致性协议,来保证缓存一致性。指令重排:例如一下五行代码,前四行的在计算机cpu的执行顺序不一定是12345,也可以是13245或者34125,但是第五步的顺序不会变,这种

    2022年5月29日
    32
  • CentOS7制作本地yum源(EPEL)步骤

    CentOS7制作本地yum源(EPEL)步骤很多情况下机器上不了互联网 无法使用默认的 yum 源安装软件 因此搭建本地 yum 源非常有必要 准备工作配置网络等 创建 yum 源用到的目录 mkdir p data soft epel data soft centos7 配置本机 yum 源方法一 使用阿里源阿里源配置相对方便 具体帮助见 https developer aliyun com mirror 备份 CentOS Base repomv etc yum repos d CentOS Base repo etc yu

    2025年10月12日
    5
  • 【转载】究竟啥才是互联网架构“高并发”

    【转载】究竟啥才是互联网架构“高并发”

    2021年11月20日
    46
  • maven配置阿里云镜像仓库「建议收藏」

    maven配置阿里云镜像仓库「建议收藏」1.修改maven根目录下的conf文件夹中的setting.xml文件<mirrors><mirror><id>alimaven</id><name>aliyunmaven</name><url>http://maven.aliyun.com/nexus/content/groups/public/</url><mirrorOf&g.

    2022年6月24日
    59
  • 主、外键约束_创建主键约束

    主、外键约束_创建主键约束主、外键约束点关注不迷路,欢迎再来!主键和外键是两种类型的约束;1.主键是能唯一的标识表中的每一行,就是说这一列非空且值不重复,可以指定为主键;作用是用来强制约束表中的每一行数据的唯一性;2.外键是b表中的某一列引用的值来源于a表中的主键列。也是约束b表中的外键列的值必须取致a表中的主键列值,不是其中的值就不能插入b表中。可以形成a表b表的联系,保持数据的约束和关联性。创建主表主键…

    2022年10月20日
    2

发表回复

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

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