首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >单元测试非常简单的功能

单元测试非常简单的功能
EN

Stack Overflow用户
提问于 2016-09-19 23:09:09
回答 3查看 742关注 0票数 2

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

代码语言:javascript
运行
复制
def square(x):
    return x**2

如果我编写了测试正确性的单元测试,那么这样做是否被认为是错误的做法:

代码语言:javascript
运行
复制
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))

从本质上讲,我不是在编写手册用例,而是在某种意义上重写单元测试中的函数?为什么或者为什么这不被认为是好的做法。

我假设还有其他的测试来检查无效的输入和其他东西;我问的是非常具体的测试函数正确性的情况。

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2016-09-19 23:17:11

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

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

这就足够了

代码语言:javascript
运行
复制
def test():
    assert square(3) == 9

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

如果您注意到一个带有负数的错误,那么您可以添加一个额外的测试。

代码语言:javascript
运行
复制
def test():
    assert square(3) == 9
    assert square(-3) == 9

通常情况下,人们会在开发完该功能之后添加单元测试,或者在一开始就尝试创建整个单元测试功能。

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

票数 6
EN

Stack Overflow用户

发布于 2016-09-19 23:21:36

通过将代码逐字复制到测试中,您实际上并不是在检查任何假设。在那一点上这是一个重言式。将单元测试分解为test inputfunction outputexpected output,您正在测试函数应该如何与实际实现一起工作的假设。

因为

代码语言:javascript
运行
复制
assert function(input)  == function(input) 

总是真实的,你实际上是在伤害自己,因为你的测试服永远不会报告回归,即使它们是被引入的。

票数 2
EN

Stack Overflow用户

发布于 2016-09-21 06:58:15

您正在尝试使用property base testing编写测试。它是一种有效的算法测试方法。Haskell.quickcheck是第一个实现。

它除了生成随机数(在指定的属性空间中)之外,还减少了集合,以便于调试失败的测试。

你很幸运: Python有一个QuickCheck

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/39583408

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档