更糟糕的设计是:在测试之间共享数据,还是每次测试多个断言?

时间:2015-09-03 12:33:06

标签: python testing tdd automated-tests

假设我正在测试我的代码,我已经为5种不同的东西设计了5种功能。函数function_a()返回的函数传递给function_b()...一直到function_e()。见下文。

var1 = function_a()
var2 = function_b(var1)
...
var5 = function_e(var4)

因此,所有这些函数都是相互依赖的,并且依赖于前一个函数的数据。

如何正确测试?单个测试中的五个断言对我来说似乎是一个代码味道,但根据接受的答案here在不同测试之间传递数据(我认为这是必要的)是一点代码味道。

2 个答案:

答案 0 :(得分:2)

从测试的角度来看,数据从一个函数传递到下一个函数的事实是无关紧要的。在测试function_a时,您只是断言它返回预期值(可能是基于某个状态)。因此,您将知道预期的回报值是什么。

单独测试function_b时,您只需将预期从function_a返回的值传递给它,并验证它是否返回预期值。你还可以测试当你传递无效值时会发生什么(当用function_a的实际返回值进行测试时会很困难。

这同样适用于其他功能。您应该分开测试并单独测试。顺序调用的事实对于每个函数都是无关紧要的。他们不知道他们的投入来自哪里

答案 1 :(得分:1)

One assertion per test只是一个推荐(虽然非常合理),并且与您在每个单元测试中一次测试一件事有关。在这里,您有多个功能 - 更大的系统的多个组件"。

理想情况下,您需要在隔离中测试每个函数,并有一组集成测试检查如果您通过完整的链完成它将如何工作功能