python unittest单元测试框架-1
Test Case、Test Suite、Test Runner、Test Fixture
- Test Case:单个测试用例
- Test Suite:测试组合。可以把多个测试用例集合在一起执行。
- Test Runner:通过Test Runner的run()方法来执行test suite/test case,可以使用图形界面、文本界面,或返回一个特殊的值来表示测试执行的结果。
- Test Fixture:测试用例环境的搭建和销毁。如果测试用例中需要访问数据库,可以在setUp中建立数据库连接,在tearDown中清除数据库产生的数据,并断开连接
1.单元测试
calculator.py
class Count:
def __init__(self,a,b):
self.a = a
self.b = b
def add(self):
return self.a + self.b
def sub(self):
return self.a - self.b
test.py
from book.calculator import Count
import unittest
class TestCount(unittest.TestCase):
def setUp(self):
print("test start")
def test_add(self):
j = Count(2,3)
self.assertEqual(j.add(),5)
def test_add2(self):
j = Count(54,49)
self.assertEqual(j.add(),103)
def tearDown(self):
print("test end")
if __name__=="__main__":
#__name__是内置属性,使用__main__就是直接使用。
#main()方法可以将一个单元测试模块变成可以直接运行的测试脚本,执行所有以test命令开头的方法
unittest.main()
2.使用Test Suite组织测试用例,Test Runner运行
2.1基于1中calculator.py执行测试集
test.py
from calculator import Count
import unittest
class TestCount(unittest.TestCase):
def setUp(self):
print("test start")
def test_add(self):
j = Count(2,3)
self.assertEqual(j.add(),5)
print("test_add执行完毕")
def test_add2(self):
j = Count(54,49)
self.assertEqual(j.add(),103)
print("test_add2执行完毕")
def tearDown(self):
print("test end")
if __name__=="__main__":
#构造测试集
suite = unittest.TestSuite()
suite.addTest(TestCount("test_add2"))
#执行测试集
runner = unittest.TextTestRunner()
runner.run(suite)
### 2.2编写新的计算类,并组织测试集
### 2.3基于2.2,修改test.py,将测试加减的用例分离
### 2.4基于2.2,如果每个类的初始化和回复一样,可以封装setUp和tearDown
test.py
from calculator import Count
import unittest
class MyTest(unittest.TestCase):
def setUp(self):
print("test start")
def tearDown(self):
print("test end")
class TestAdd(MyTest):
def test_add(self):
j = Count(2,3)
self.assertEqual(j.add(),5)
print("test_add执行完毕")
def test_add2(self):
j = Count(54,49)
self.assertEqual(j.add(),103)
print("test_add2执行完毕")
class TestSub(MyTest):
def test_sub(self):
j = Count(4,1)
self.assertEqual(j.sub(),3)
print("test_sub执行完毕")
def test_sub2(self):
j = Count(5,9)
self.assertEqual(j.sub(),-4)
print("test_sub2执行完毕")
if __name__=="__main__":
#构造测试集
suite = unittest.TestSuite()
suite.addTest(TestAdd("test_add2"))
suite.addTest(TestSub("test_sub2"))
#执行测试
runner = unittest.TextTestRunner()
runner.run(suite)
2.5基于2.3,修改test.py,将测试加减的用例分离到不同的脚本中
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
testadd.py
from calculator import Count
import unittest
class TestAdd(unittest.TestCase):
def setUp(self):
print("test add start")
def test_add(self):
j = Count(2,3)
self.assertEqual(j.add(),5)
print("test_add执行完毕")
def test_add2(self):
j = Count(54,49)
self.assertEqual(j.add(),103)
print("test_add2执行完毕")
def tearDown(self):
print("test add end")
if __name__=="__main__":
unittest.main()
testsub.py
from calculator import Count
import unittest
class TestSub(unittest.TestCase):
def setUp(self):
print("test sub start")
def test_sub(self):
j = Count(4,1)
self.assertEqual(j.sub(),3)
print("test_sub执行完毕")
def test_sub2(self):
j = Count(5,9)
self.assertEqual(j.sub(),-4)
print("test_sub2执行完毕")
def tearDown(self):
print("test sub end")
if __name__=="__main__":
unittest.main()
runtest.py
import unittest
from testadd import TestAdd
from testsub import TestSub
suite = unittest.TestSuite()
suite.addTest(TestAdd("test_add"))
suite.addTest(TestAdd("test_add2"))
suite.addTest(TestSub("test_sub"))
suite.addTest(TestSub("test_sub2"))
if __name__=="__main__":
runner = unittest.TextTestRunner()
runner.run(suite)