背景:在unittest中运行单元测试,是没有顺序的,如果要指定运行顺序有两种方式
方法1:在运行方法后,加上数字test_0 、test_1 这样也会指定顺序
方法2:使用不同的字母表示,因为在单元测试框架中会对比每个运行方法名的ascii码,ascii码越大执行越靠后
案例:
测试方法
# coding=utf-8 class Calc(object): def add(self, x, y, *d): # 加法计算 result = x + y for i in d: print(i) result += i return result def sub(self, x, y, *d): # 减法计算 result = x - y for i in d: result -= i return result @classmethod def mul(cls, x, y, *d): # 乘法计算 result = x * y for i in d: result *= i return result @staticmethod def div(x, y, *d): # 除法计算 if y != 0: result = x / y else: raise ZeroDivisionError return -1 for i in d: if i != 0: result /= i else: raise ZeroDivisionError return -1 return result if __name__=="__main__": c=Calc() print (c.add(1,2,3,4))
运行单元测试方法
import unittest from Calc import Calc class MyTest(unittest.TestCase): @classmethod def setUpClass(self): print (u"单元测试前,创建Calc类的实例") self.c = Calc() def test_3div(self): print ("run div()") self.assertEqual(Calc.div(8, 2, 4), 1, 'test div fail') # 具体的测试用例,一定要以test开头,执行顺序按照字母顺序开头 def test_0add(self): print ("run add()") self.assertEqual(self.c.add(1, 2, 12), 15, 'test add fail') def test_1sub(self): print ("run sub()") self.assertEqual(self.c.sub(2, 1, 3), -2, 'test sub fail') def test_2mul(self): print ("run mul()") self.assertEqual(Calc.mul(2, 3, 5), 30, 'test mul fail') def test_runb(self): print("run b") def test_runa(self): print ("run a") if __name__ == '__main__': unittest.main()# 启动单元测试
执行结果
运行的数字排序、在相同的方法名时,对比不同字母的ascii码,a是97 b是98