7Vo*_*yon 2 python unit-testing
说我有一个简单的形式功能:
def square(x):
return x**2
Run Code Online (Sandbox Code Playgroud)
如果我为测试正确性编写单元测试,那么做以下事情是不好的做法:
def test_square(self):
for _ in range(50):
rand_num = random.uniform(-10,10)
self.assertAlmostEqual(square(rand_num), rand_num**2, msg= "Failed for input: {}".format(rand_num))
Run Code Online (Sandbox Code Playgroud)
在哪里基本上不是编写手工案例,我在某种意义上重写了单元测试中的功能?为什么或为什么这不被视为良好做法.
我假设有其他测试检查无效的输入和东西; 我问的是测试函数正确性的具体情况.
随机输入几乎不是你想要的.如果您的测试有时成功但由于测试生成的随机输入不同而导致其他测试失败,那将不会非常有用
您只需要测试最低限度以确保正确的结果.如果您有错误或回归,则根据需要添加其他测试.
这就足够了
def test():
assert square(3) == 9
Run Code Online (Sandbox Code Playgroud)
请注意,测试不依赖于任何特定的实现细节(即它只包括计算9而不是3**2).通常,您希望测试具有尽可能少的依赖性和复杂性.通常,您尝试一次测试一件事,而较少的依赖性意味着您实际上正在测试您想要的东西,而不是与某些依赖项的交互.
如果您发现了负数的错误,那么您可以添加一个额外的测试
def test():
assert square(3) == 9
assert square(-3) == 9
Run Code Online (Sandbox Code Playgroud)
通常,人们会在他们已经开发出功能之后添加单元测试,或者他们会在一开始就尝试立即创建整个单元测试功能.
最好的方法通常是一次测试一个功能,并一次添加一个功能,并一起开发测试和功能.