python - 单元测试非常简单的功能

标签 python unit-testing

<分区>

假设我有一个简单的表单函数:

def square(x):
    return x**2

如果我编写一个单元测试来测试正确性,那么做这样的事情是否被认为是不好的做法:

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))

在某种意义上,我不是在编写手动案例,而是在重写单元测试中的函数?为什么或为什么不将其视为良好做法。

我假设还有其他测试可以检查无效输入和内容;我问这个是为了测试函数正确性的非常具体的情况。

最佳答案

随机输入几乎不是您想要的。如果您的测试有时成功但由于测试生成的随机输入不同而在其他测试中失败,那将不会很有帮助

您只需测试最低限度即可确保结果正确。如果您有错误或回归,您可以根据需要添加额外的测试。

这就足够了

def test():
    assert square(3) == 9

请注意,该测试不依赖于任何特定的实现细节(即它仅包括计算的 9 而不是 3**2)。通常,您希望您的测试具有尽可能少的依赖性和复杂性。通常,您尝试一次测试一件事,较少的依赖项意味着您实际上是在测试您想要的东西,而不是与某些依赖项的交互。

如果您发现负数错误,则可以添加额外的测试

def test():
    assert square(3) == 9
    assert square(-3) == 9

通常,人们会在已经开发完功能后添加单元测试,或者他们会尝试在一开始就立即创建整个单元测试功能。

最好的方法通常是一次测试一个特性,一次添加一个特性,同时开发测试和功能。

关于python - 单元测试非常简单的功能,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39583408/

相关文章:

python - 为客户管理 Python 包的替代方案有哪些?

python - 如何序列化request.POST数据?

python - 无法访问属于任何人的媒体文件 :nobody

python - 在 Python 中仅打印有效数字

python - 如何在python源代码中检测I/O(I/O的标准库方式)

c# - 如何使用 C# 比较两个 Json 对象

java - @AfterMethod 和 ITestListener#onFailure 的 TestNG 调用顺序

c# - 在单元测试中使用伪造接口(interface)中未定义的方法

ruby - 如何在 ruby​​ 模块中包含单元测试?

unit-testing - 如何使自动工具测试读取文件?