创建一个项目,目录中有Calculator.py与Demo_test_three.py两个源码文件。Calculator.py是被测试的代码,Demo_test_three.py是执行测试的代码。本示例建了两级目录。一级目录名称:my_unittest;二级目录名称:unittest_demo。执行测试的源码中一开始的导入包语句会看到。
class Calculator:
def divide(self, x, y):
return x/y
import unittest
from my_unittest.unittest_demo.Calculator import Calculator
class TestCalculator(unittest.TestCase):
def test_Divide01(self):
cal = Calculator()
result = cal.divide(10, 2)
self.assertEqual(result, 5)
def test_Divide02(self):
cal = Calculator()
result = cal.divide(10, 0.5)
self.assertEqual(result, 10)
def test_Divide03(self):
cal = Calculator()
result = cal.divide(10, 0)
self.assertEqual(result, 0)
if __name__ == '__main__':
unittest.main()
首先定义了测试类TestCalculator。继承于父类unittest.TestCase模块。该测试类中包含三个测试方法test_Divide01、test_Divide02、test_Divide01,即三个测试用例。第一个测试用例:用10除以2,预期结果为5,测试结果通过;第二个测试用例:用10除以0.5,为了观察运行结果,刻意设置错误的预期结果为10,但实际结果为20,出现断言错误,测试失败。第三个测试用例:实现异常测试。用10除以0,出现零除运行错误,提示不能用0作为分母。最后调用unittest.main()方法执行当前类中的所有test开头的方法直接运行程序。不必再专门对TestCalculator进行实例化。
Calculator类的Divide方法具有明显的Bug,该方法没有对输入参数进行校验。导致在分母为0时运行错误。测试人员发现Bug后应及时通知开发人员修复,避免造成损失。这个简单示例展现了Unittest的使用价值。体现了测试工作在程序开发中的重要意义。