一、生成Django项目中--sign文件--tests.py文件中为Django的测试case管理文件python
Django下面的测试模块(上图中的TestCase)是继承python下面的unit test(单元测试框架)下面的TestCase模块框架
二、在Python中建立的全部类默认都是继承object函数
class Calculator: class Calculator(): class Calculator(object):
class Calculator(object): def add(self,a,b): return a + b def sub(self,a ,b): return a - b
2.2.一、不用unittest框架实现单元测试
count_test.py文件测试
import test c = test.Calculator() #引入test文件中的Calculator类 result = c.add(3,5) #调用Calculator类下面的add方法 print (result)
验证利用assert方法进行验证明际结果与预期结果知否一致ui
import test c = test.Calculator() result = c.add(3,5) print (result) assert result == 8
2.2.二、用unittest框架实现spa
def assertEqual(self, first, second, msg=None): """Fail if the two objects are unequal as determined by the '==' operator. """ assertion_func = self._getAssertEqualityFunc(first, second) assertion_func(first, second, msg=msg)
2.2.三、caseblog
import test import unittest class MyTest(unittest.TestCase): #必须建立一个测试类,不能直接调用,且类必须继承unittest下面的TestCase """docstring for Mytest""" def test_add(self): #建立测试方法,测试方法必须以test开头 c = test.Calculator() result = c.add(3,5) print (result) self.assertEqual(result ,9,msg = 'error') #断言方法用unittest自带的,若是要使用父类下面的方法的话须要self.方法 if __name__ == '__main__': #unittest中用main函数来执行case unittest.main()
3.一、普通的单元case排序
import test import unittest class MyTest(unittest.TestCase): """docstring for Mytest""" def test_add(self): c = test.Calculator() result = c.add(3,5) print (result) self.assertEqual(result ,8,msg = '1') def test_add2(self): c = test.Calculator() result = c.add(30,50) print (result) self.assertEqual(result ,80,msg = '2') def test_sub(self): c = test.Calculator() result = c.sub(3,5) print (result) self.assertEqual(result ,-2,msg = '3') def test_sub2(self): c = test.Calculator() result = c.sub(30,50) print (result) self.assertEqual(result ,-20,msg = '4') if __name__ == '__main__': unittest.main()
3.二、使用setUp()与tearDown()继承
setUp():每条用例执行以前初始化一些数据
tearDown():每条用例执行以后作一些关闭的动做
import test import unittest class MyTest(unittest.TestCase): def setUp(self): print("start test.") def tearDown(self): print("end test.") """docstring for Mytest""" def test_add(self): c = test.Calculator() result = c.add(3,5) print (result) self.assertEqual(result ,8,msg = '1') def test_add2(self): c = test.Calculator() result = c.add(30,50) print (result) self.assertEqual(result ,80,msg = '2') def test_sub(self): c = test.Calculator() result = c.sub(3,5) print (result) self.assertEqual(result ,-2,msg = '3') def test_sub2(self): c = test.Calculator() result = c.sub(30,50) print (result) self.assertEqual(result ,-20,msg = '4') if __name__ == '__main__': unittest.main() #执行结果以下: #每条case执行都会执行setUp()与tearDown()方法,因此会有4条 # start test. # 8 # ....end test. # start test. # 80 # end test. # start test. # -2 # end test. # start test. # -20 # end test. # ---------------------------------------------------------------------- # Ran 4 tests in 0.000s # OK # [Finished in 0.4s]
可将上面c = test.Calculator() 共有的语句添加到setUp()中去
import test import unittest class MyTest(unittest.TestCase): def setUp(self): #若是直接是c = test.Calculator()的话,c表示的是setUp私有的变量,不能被下面的case所调用,因此须要在前面加self.c变成共有的 self.c = test.Calculator() def tearDown(self): print("end test.") """docstring for Mytest""" def test_add(self): result = self.c.add(3,5) #使用c也须要是self.c使用公有的 print (result) self.assertEqual(result ,8,msg = '1') def test_add2(self): result = self.c.add(30,50) print (result) self.assertEqual(result ,80,msg = '2') def test_sub(self): result = self.c.sub(3,5) print (result) self.assertEqual(result ,-2,msg = '3') def test_sub2(self): result = self.c.sub(30,50) print (result) self.assertEqual(result ,-20,msg = '4') if __name__ == '__main__': unittest.main() #运行结果 # 8 # end test. # .... # ---------------------------------------------------------------------- # Ran 4 tests in 0.000s # OK # 80 # end test. # -2 # end test. # -20 # end test. # [Finished in 0.4s]
3.三、执行特定的用例
import test import unittest class MyTest(unittest.TestCase): def setUp(self): self.c = test.Calculator() def tearDown(self): print("end test.") """docstring for Mytest""" def test_add(self): result = self.c.add(3,5) print (result) self.assertEqual(result ,8,msg = '1') def test_add2(self): result = self.c.add(30,50) print (result) self.assertEqual(result ,80,msg = '2') def test_sub(self): result = self.c.sub(3,5) print (result) self.assertEqual(result ,-2,msg = '3') def test_sub2(self): result = self.c.sub(30,50) print (result) self.assertEqual(result ,-20,msg = '4') if __name__ == '__main__': # 建立测试套件 suit = unittest.TestSuite() suit.addTest(MyTest("test_sub2")) suit.addTest(MyTest("test_sub")) #测试运行 runner = unittest.TextTestRunner() runner.run(suit) #运行结果 # -20 # end test. # .. # ---------------------------------------------------------------------- # Ran 2 tests in 0.000s # OK # -2 # end test. # [Finished in 0.4s]
3.四、运行的依据
类下面有继承TestCase()方法
用例是test开头的命名
执行顺序:test_aad2 先于test_add2,依据ASCII排序来决定执行顺序