为了给出一个稍微做作的例子,假设我想测试一个函数返回两个数字,第一个数字比第二个数字要小:
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或跳过它是最佳实践吗?
编辑:请注意,在这种情况下,两个测试基本上是相互独立的,每个测试都可以单独运行,或者可以按相反顺序运行,这并不重要。所以前几个问题
是上面那个的复制品。
发布于 2015-01-12 15:34:32
可能有价值,但这有点难闻。要么您的测试没有很好地隔离(因为test_order确实测试了两件事情),要么您在测试中过于教条主义(让两个测试成为逻辑上相同的事情)。
在这个例子中,我会将这两个测试合并在一起。是的,这意味着你有多个断言。太可惜了。你还在测试一个东西--函数的结果。有时在现实世界里,这意味着要做两次检查。
发布于 2015-01-12 15:34:54
你的测试应该是明确的。不能完全推断如果text_length失败,test_order就会失败。
我不确定在您发布的Python中它是如何运行的,但是如果len(result)是3,那么第一个就会失败,但是第二个可能会通过(如果不是Python,那么肯定是在JavaScript这样的语言中)。
正如您所说的,您希望测试该函数是否返回两个数字,并且它们是否正常。两次测试。
发布于 2015-01-12 19:41:29
这里test_length的唯一值是,如果一切都通过,它的存在本身就表示“长度”已经过测试。
所以这两个测试都是不必要的。只保留test_order,但考虑将其重命名为test_length_and_order。
顺便说一句,我发现使用以test开头的名称有点笨拙。我是测试名称的有力拥护者,它实际上描述了您所断言的条件。
https://softwareengineering.stackexchange.com/questions/269825
复制相似问题