10.1_Python的单元测试

10.1 Python的单元测试

在Python中进行测试的一个很方便的做法是使用标准库中的unittest。下面对前面的步骤中实现的square函数进行测试。代码如下所示。

steps/step10.py

import unittest   
class SquareTest(unittest.TestCase): def test_forward(self):  $\mathrm{x} =$  Variable(np.array(2.0)) y  $=$  square(x) expected  $=$  np.array(4.0) self.assertEqual(y.data,expected)

前面的代码首先导入了 unittest,然后实现了继承 unittest.TestCase 的 SquareTest 类。创建名字以 test 开头的方法后,将测试逻辑写在该方法中。示例中的测试用于验证 square 函数的输出与预期值是否一致。具体来说,它验证的是当输入为 2.0 时,输出是否为 4.0。

上面的例子使用方法self assertEqual来验证square函数的输出与预期值是否一致。这个方法可以判断两个给定对象是否相等。除了这个方法,unittest还提供了self assertGreater和self assertTrue等方法。关于其他方法的更多信息,请阅读参考文献[8]等资料。

现在运行上面的测试代码。假定该测试代码在文件step/step10.py中。这时,在终端运行以下命令。

$ python -m unitittest steps/step10.py

像这样在命令中加上参数 -m unittest,就能在测试模式下运行 Python 文件了。另外,只要在 step10.py 文件末尾添加以下代码,就能用 python steps/step10.py 命令运行测试。

step10.py  
unittest.main()

现在看看测试的输出。运行上面的命令,程序会输出以下结果。

.   
Ran 1 tests in 0.000s   
OK

这个输出的意思是“运行了一个测试,结果OK”。也就是说,测试通过了。如果测试过程中出现了一些问题,程序就会输出“FAIL: test_forward(step10 SquareTest)”,这表示测试失败了。