首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >编写作为另一个测试子集的单元测试有价值吗?

编写作为另一个测试子集的单元测试有价值吗?
EN

Software Engineering用户
提问于 2015-01-12 15:24:07
回答 4查看 2.3K关注 0票数 15

为了给出一个稍微做作的例子,假设我想测试一个函数返回两个数字,第一个数字比第二个数字要小:

代码语言:javascript
复制
def test_length():
    result = my_function()
    assert len(result) == 2

def test_order()
    a, b = my_function()
    assert a < b

在这里,如果test_length失败,那么test_order也会失败。编写test_length或跳过它是最佳实践吗?

编辑:请注意,在这种情况下,两个测试基本上是相互独立的,每个测试都可以单独运行,或者可以按相反顺序运行,这并不重要。所以前几个问题

是上面那个的复制品。

EN

回答 4

Software Engineering用户

回答已采纳

发布于 2015-01-12 15:34:32

可能有价值,但这有点难闻。要么您的测试没有很好地隔离(因为test_order确实测试了两件事情),要么您在测试中过于教条主义(让两个测试成为逻辑上相同的事情)。

在这个例子中,我会将这两个测试合并在一起。是的,这意味着你有多个断言。太可惜了。你还在测试一个东西--函数的结果。有时在现实世界里,这意味着要做两次检查。

票数 27
EN

Software Engineering用户

发布于 2015-01-12 15:34:54

你的测试应该是明确的。不能完全推断如果text_length失败,test_order就会失败。

我不确定在您发布的Python中它是如何运行的,但是如果len(result)是3,那么第一个就会失败,但是第二个可能会通过(如果不是Python,那么肯定是在JavaScript这样的语言中)。

正如您所说的,您希望测试该函数是否返回两个数字,并且它们是否正常。两次测试。

票数 5
EN

Software Engineering用户

发布于 2015-01-12 19:41:29

这里test_length的唯一值是,如果一切都通过,它的存在本身就表示“长度”已经过测试。

所以这两个测试都是不必要的。只保留test_order,但考虑将其重命名为test_length_and_order

顺便说一句,我发现使用以test开头的名称有点笨拙。我是测试名称的有力拥护者,它实际上描述了您所断言的条件。

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

https://softwareengineering.stackexchange.com/questions/269825

复制
相关文章

相似问题

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