Python 在标准库中提供了两个主要模块来编写测试。 ● unittest(https://docs.python.org/3/library/unittest.html):这是标准库也是最常见 的Python 单元测试框架,它基于Java 的JUnit 框架,最初由Steve Purcell 编写(以 前称为PyUnit)。 ● doctest(https://docs.python.org/3/library/doctest.html):这是一个有读写能力的编 程测试工具,它带有交互式使用示例。 1.unittest unittest 基本上提供了Java 中的Junit 框架的功能。它提供了一个名为TestCase 的基类,它有一组广泛的方法来验证函数调用和语句的输出。 该模块是为编写单元测试而创建的,但是只要测试使用用户接口,验收测试也可以用 它来编写。例如,一些测试框架提供帮助,在unittest 之上驱动工具,如Selenium。 使用unittest 为一个模块编写一个简单的单元测试,这是通过继承TestCase 类并 且使用test 前缀来编写方法来完成的。测试驱动开发原则部分的最后一个例子,如下所示: import unittest from primes import is_prime class MyTests(unittest.TestCase): def test_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() unittest.main()函数是一个通用程序,它允许将整个模块作为一个测试套件执行, 如下所示: $ python test_is_prime.py -v test_is_prime (main.MyTests) … ok

Ran 1 test in 0.000s OK unittest.main()函数扫描当前模块的上下文,并查找TestCase 类的子类。它实 例化这些子类,然后运行所有以test 作为前缀开头的方法。 一个好的测试套件遵循通用和一致的命名约定。例如,如果primes.py 模块中包含 is_prime 函数,则测试类可以命名为PrimesTests 并放入test_primes.py 文件中, 如下所示: import unittest from primes import is_prime class PrimesTests(unittest.TestCase): def test_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() 从那里,每次在utils 模块中进行开发,就在test_primes 模块中编写更多的测试。 为了运行测试,test_primes 模块需要在上下文中获得primes 模块。这可以通过unittest.main() unittest.main()函数是一个通用程序,它允许将整个模块作为一个测试套件执行, 如下所示: $ python test_is_prime.py -v test_is_prime (main.MyTests) … ok

Ran 1 test in 0.000s OK unittest.main()函数扫描当前模块的上下文,并查找TestCase 类的子类。它实 例化这些子类,然后运行所有以test 作为前缀开头的方法。 一个好的测试套件遵循通用和一致的命名约定。例如,如果primes.py 模块中包含 is_prime 函数,则测试类可以命名为PrimesTests 并放入test_primes.py 文件中, 如下所示: import unittest from primes import is_prime class PrimesTests(unittest.TestCase): def test_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() 从那里,每次在utils 模块中进行开发,就在test_primes 模块中编写更多的测试。 为了运行测试,test_primes 模块需要在上下文中获得primes 模块。这可以通过if name == ‘main’: unittest.main(defaultTest=‘test_suite’) 在shell 中运行此模块将打印测试活动输出,如下所示: $ python test_primes.py -v test_is_prime (main.PrimesTests) … ok test_true (main.OtherTests) … ok

Ran 2 tests in 0.001s OK 在旧版本的Python 中,unittest 模块没有正确的测试发现实用程序,就需要使用前 面的方法。通常,所有测试的运行都是通过一个全局脚本来完成的,该脚本浏览代码树寻 找测试并运行它们。这个过程被称为测试发现(test discovery),将在本章后面继续讨论。 现在,你应该只知道unittest 提供了一个简单的命令,可以从模块和包中发现带有test 前缀的所有测试,如下所示: $ python -m unittest -v test_is_prime (test_primes.PrimesTests) … ok test_true (test_primes.OtherTests) … ok

Ran 2 tests in 0.001s OK 如果使用上述命令,则不需要手动定义__main__部分并调用unittest.main()函数。

文章来源

评论可见,请评论后查看内容,谢谢!!!
 您阅读本篇文章共花了: