zoukankan      html  css  js  c++  java
  • TestLoader类中提供的discover()方法

    calculator.py
    class Count:
    def __init__(self,a,b):
    self.a = int(a)
    self.b = int(b)

    #计算加法
    def add(self):
    return self.a + self.b

    #计算减法
    def sub(self):
    return self.a - self.b

    runtest.py

    import unittest
    # 加载测试文件
    import testadd
    import testsub

    # 构造测试集
    suite = unittest.TestSuite()
    suite.addTest(testadd.TestAdd("test_add"))
    suite.addTest(testadd.TestAdd("test_add2"))
    suite.addTest(testsub.TestSub("test_sub"))
    suite.addTest(testsub.TestSub("test_sub2"))
    if __name__ == '__main__':
    # 执行测试
    runner = unittest.TextTestRunner()
    runner.run(suite)

    """
    这样的拆分带来了好处,可以根据不同的功能创建不同的测试文件,甚至是不同的测试目录,
    测试文件中还可以将不同的小功能划分为不同的测试类,在类下编写测试用例,整体结构更加清晰。
    这样的设计看上去很完美,但依然没有解决添加用例的问题,当用例达到成百上千条时,
    在runtest.py文件中通过addTest()添加/删除测试用例就变得非常麻烦,
    那么有没有方法让unitest单元测试框架自动识别测试用例呢?答案是肯定的,
    TestLoader类中提供的discover()方法可以解决这个问题。
    """

    testadd.py

    from calculator import Count
    import unittest
    class TestAdd(unittest.TestCase):
    def setUp(self):
    print("test case start")

    def tearDown(self):
    print("test case end")

    def test_add(self):
    j = Count(2,3)
    self.assertEqual(j.add(),5)

    def test_add2(self):
    j = Count(41, 76)
    self.assertEqual(j.add(), 117)

    if __name__ == '__main__':
    unittest.main()

    TestLoader类中提供的discover()方法.py

    """
    discover(start_dir,pattern=test*py',top level dir=None)
    找到指定目录下所有测试模块,并可递归查到子目录下的测试模块,只有匹配到文件名才能被加载。
    如果启动的不是顶层目录,那么顶层目录必须单独指定。
    ·start_dir:要测试的模块名或测试用例目录。
    ·patern=-test*.py:表示用例文件名的匹配原则。此处匹配文件名以“test”开头的“.py”类型的文件,
    星号“*”表示任意多个字符。
    ·top_level_dir=None:测试模块的顶层目录,如果没有顶层目录,默认为None。
    现在通过discover()方法重新实现runtest.py文件的功能。
    """

    import unittest
    #定义测试用例的目录为当前目录:
    test_dir = "./"
    discover = unittest.defaultTestLoader.discover(test_dir,pattern="test*.py")
    if __name__ == '__main__':
    runner = unittest.TextTestRunner()
    runner.run(discover)

    """
    discover()方法会自动根据测试目录(test_dir)匹配查找测试用例文件(test*.py),
    并将查找到的测试用例组装到测试套件中,因此,可以直接通过run()方法执行discover,
    大大简化了测试用例的查找与执行。
    """

    testsub.py

    from calculator import Count
    import unittest
    class TestSub(unittest.TestCase):
    def setUp(self):
    print("test case start")

    def tearDown(self):
    print("test case end")

    def test_sub(self):
    j = Count(2, 3)
    self.assertEqual(j.sub(),-1)

    def test_sub2(self):
    j = Count(71, 46)
    self.assertEqual(j.sub(),25)

    if __name__ == '__main__':
    unittest.main()

     

     

     

     

     
  • 相关阅读:
    埃尔多安回击“穆斯林都是恐怖分子”:坏人也可能是基督徒或犹太人
    通信行业并非那么”腹黑“
    苹果无人驾驶技术专家遭大众挖角
    数据结构之数组定义及基本操作(转)
    LCD浮点数显示函数的探讨
    C 数据类型
    C 基本语法
    C 标准库
    C 语言实例
    C 语言实例
  • 原文地址:https://www.cnblogs.com/zhang-da/p/12210601.html
Copyright © 2011-2022 走看看