在python中,单元测试用于测试模块、函数或类别的正确性。
单元测试
通常是测试一小块代码的功能,比如一个函数,一种类的方法。
单元测试通常是由开发人员进行的测试,通常是测试函数和代码块的方法。大多数单元测试都是 为调用函数设计不同的调用参数,以便查看 函数 输出是否符合预期。当然,如果你的代码写得不好,单元测试会更麻烦。例如,功能模块分散在代码文件中,而不是内聚到函数中。这样,用函数调用来测试这些功能就不容易了。
Python用pytest进行单元测试
python内置unittest,但写起来有点繁琐,比如写testcase,还得用 assertEqual, assertNotequal等断言方法。 使用pytest操作测试统一使用assert语句,与unitest兼容。目前,PyPy、sentry等许多著名的开源项目也在使用中。使用pytest可以参考其官方文档。虽然有许多先进的特点,但掌握其中一小部分基本上就足够了。
下面是py.以两种常见的测试类型(验证返回值和抛出异常)为例,test的基本用法:
defadd(a,b): """returna+b Args: a(int):int b(int):int Returns: a+b Raises: AssertionError:ifaorbisnotinteger """ assertall([isinstance(a,int),isinstance(b,int)]) returna+b deftest_add(): assertadd(1,2)==3 assertisinstance(add(1,2),int) withpytest.raises(Exception):#testexception add('1',2)
以上是一个例子。在真实场景中,它比这更复杂,有时结构测试的时间比写业务逻辑的时间要长得多。但无论逻辑有多复杂,它也是一点功能积累。如果每个部分都是正确的,整体上就不会出错。单元测试还提醒我们,函数完成的功能应尽可能单一,这有利于测试。
以下是我常用的pytest命令:
py.testtest_mod.py#runtestsinmodule py.testsomepath#runalltestsbelowsomepath py.test-qtest_file_name.py#quite输出 py.test-stest_file_name.py#-S参数可以打印测试代码中的输出,默认不打印,print没有结果 py.testtest_mod.py::test_func#onlyrunteststhatmatchthe"nodeID", py.testtest_mod.py::TestClass::test_method#runasinglemethodin
推荐课程:Python入门课程(黑马程序员)