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 testaddimport 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 Countimport unittestclass 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 Countimport unittestclass 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()
原文地址:https://www.cnblogs.com/zhang-da/p/12210601.html
时间: 2024-09-30 02:01:23