当你有时,你如何进行单元测试
- 一些常规单元测试
- 更复杂的测试检查边缘情况,具体取决于一般情况
举个例子,想象一下测试 CSV 阅读器(我只是编写了一个用于演示的符号),
def test_readCsv(): ...
@dependsOn(test_readCsv)
def test_readCsv_duplicateColumnName(): ...
@dependsOn(test_readCsv)
def test_readCsv_unicodeColumnName(): ...
我希望子测试仅在父测试成功时才运行。这背后的原因是运行这些测试需要时间。许多归咎于单一原因的故障报告也不会提供任何信息。当然,我可以将所有边缘情况硬塞到主要测试中,但我想知道是否有一种更结构化的方法来做到这一点。
我发现了这些相关但不同的问题,
- How to structure unit tests that have dependencies?
- Unit Testing - Is it bad form to have unit test calling other unit tests
更新:
我找到了TestNG它对测试依赖项有很好的内置支持。您可以编写这样的测试,
@Test{dependsOnMethods = ("test_readCsv"))
public void test_readCsv_duplicateColumnName() {
...
}
最佳答案
就我个人而言,我不担心在单元测试之间创建依赖关系。对我来说,这听起来有点代码味道。几点:
- 如果测试失败,让其他测试失败,并充分了解不利的代码更改所造成的问题的严重程度。
- 测试失败应该是异常(exception)而不是常态,那么当绝大多数时间(希望如此!)没有带来任何好处时,为什么还要浪费精力并创建依赖关系呢?如果失败经常发生,那么您的问题不在于单元测试依赖项,而在于频繁的测试失败。
- 单元测试应该运行得非常快。如果它们运行缓慢,那么请将精力集中在提高这些测试的速度上,而不是防止后续失败。通过进一步解耦代码并使用依赖项注入(inject)或模拟来实现此目的。
关于python - 单元测试与测试之间的依赖关系,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3843171/