前言
Python中含有一个单元测试模块unittest,我们可以使用其中的工具来测试代码。在编写测试用例后,可以查看一系列输入是否得到了预期的输出。单元测试专注于测试软件单元,软件单元可以被理解为应用程序代码的最小可测试部分。
代码
import unittest
defis_prime(number):if number <0or number in(0,1):returnFalsefor element inrange(2, number):if number % element ==0:returnFalsereturnTrueclassMyTests(unittest.TestCase):deftest_is_prime(self):
self.assertTrue(is_prime(5))
self.assertTrue(is_prime(7))
self.assertFalse(is_prime(8))
self.assertFalse(is_prime(0))
self.assertFalse(is_prime(1))
self.assertFalse(is_prime(-1))
self.assertFalse(is_prime(-3))
self.assertFalse(is_prime(-6))if __name__ =="__main__":
unittest.main()
在代码中我们需要测试的是一个数字是否为质数的函数
is_prime
。使用unittest进行单元测试时首先要创建一个
unittest.TestCase
的子类(这里是MyTests),随后调用
unittest.main()
后会自动调用这个子类当中的类方法去进行测试。
在类方法中使用的
assertTrue
和
assertFalse
是一种断言的方式,用来判断返回值是否为True或False。其他的断言方式有
方法用途assertEqual(a, b)核实a == bassertNotEqual(a, b)核实a != bassertTrue(x)核实x 为TrueassertFalse(x)核实x 为FalseassertIn(item , list )核实 item 在 list 中assertNotIn(item , list )核实 item 不在 list 中
运行结果如下:
Ran 1 test in 0.001s
OK
旧的使用方式
在以往的Python中,有这样一个约定,测试模块提供一个test_suite函数,该函数返回一个TestSuite实例,当模块被命令提示符调用或被测试运行器使用时,在__main__部分会调用它。
import unittest
defis_prime(number):if number <0or number in(0,1):returnFalsefor element inrange(2, number):if number % element ==0:returnFalsereturnTrueclassPrimesTests(unittest.TestCase):deftest_is_prime(self):
self.assertTrue(is_prime(5))
self.assertTrue(is_prime(7))
self.assertFalse(is_prime(8))
self.assertFalse(is_prime(0))
self.assertFalse(is_prime(1))
self.assertFalse(is_prime(-1))
self.assertFalse(is_prime(-3))
self.assertFalse(is_prime(-6))classOtherTests(unittest.TestCase):deftest_true(self):
self.assertTrue(True)deftest_suite():"""构建测试套件"""
suite = unittest.TestSuite()
suite.addTests(unittest.makeSuite(PrimesTests))
suite.addTests(unittest.makeSuite(OtherTests))return suite
if __name__ =='__main__':
unittest.main(defaultTest='test_suite')
在上述代码中构建了一个测试套件
test_suite
,其中构建了一个unittest.TestSuite()的类的实例化,随后将两个待测试的方法添加到这个实例化的对象中。
运行结果
Ran 2 tests in0.001s
OK
版权归原作者 艾醒(AiXing-w) 所有, 如有侵权,请联系我们删除。