Python 哪种设计更糟糕:在测试之间共享数据,还是每个测试都有多个断言?

Python 哪种设计更糟糕:在测试之间共享数据,还是每个测试都有多个断言?,python,testing,tdd,automated-tests,Python,Testing,Tdd,Automated Tests,假设我正在测试我的代码,我设计了5个函数来实现5种不同的功能。函数_a()返回的数据被传递给函数_b()。。。ect一直运行到函数_e()。见下文 var1 = function_a() var2 = function_b(var1) ... var5 = function_e(var4) 因此,所有这些函数都是相当相互依赖的,并且依赖于前一个函数的数据 我如何正确地测试它?单个测试中的五个断言对我来说似乎是一种代码味道,但根据公认的答案,在不同的测试之间传递数据(我认为这在这里是必要的)有点

假设我正在测试我的代码,我设计了5个函数来实现5种不同的功能。函数_a()返回的数据被传递给函数_b()。。。ect一直运行到函数_e()。见下文

var1 = function_a()
var2 = function_b(var1)
...
var5 = function_e(var4)
因此,所有这些函数都是相当相互依赖的,并且依赖于前一个函数的数据

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

只是一个建议(虽然很合理),与在每个单元测试中一次测试一件事情有关。在这里,您有多个功能-一个更大的“系统”的多个组件


理想情况下,您需要在隔离状态下测试这些函数中的每一个,并进行一组集成测试,以检查如果您通过完整的函数链,它将如何工作。

从测试的角度来看,数据从一个函数传递到下一个函数的事实是不相关的。当测试
函数\u a
时,您只需断言它返回预期值(可能基于某些状态)。因此,您将知道预期的返回值是什么

当单独测试
函数\u b
时,您只需将预期从
函数\u a
返回的值传递给它,并验证它是否返回预期值。您还可以测试传递无效值时发生的情况(当使用
函数a的实际返回值进行测试时会很困难)


这同样适用于其他函数。您应该将测试拆分并单独进行测试。顺序调用的事实对每个函数都没有影响。它们不知道自己的输入来自何处。共享数据更糟糕。但将所有这些变量进行网格化是一个问题吗?@pacholik您能澄清一下您的想法吗我是说网格?我只是想独立创建所有网格。谢谢,这就解决了问题。我知道我遗漏了一些重要的东西。