python - 单元测试与测试之间的依赖关系

标签 python unit-testing code-organization

当你有时,你如何进行单元测试

  • 一些常规单元测试
  • 更复杂的测试检查边缘情况,具体取决于一般情况

举个例子,想象一下测试 CSV 阅读器(我只是编写了一个用于演示的符号),

def test_readCsv(): ...

@dependsOn(test_readCsv)
def test_readCsv_duplicateColumnName(): ...

@dependsOn(test_readCsv)
def test_readCsv_unicodeColumnName(): ...

我希望子测试仅在父测试成功时才运行。这背后的原因是运行这些测试需要时间。许多归咎于单一原因的故障报告也不会提供任何信息。当然,我可以将所有边缘情况硬塞到主要测试中,但我想知道是否有一种更结构化的方法来做到这一点。

我发现了这些相关但不同的问题,

更新:

我找到了TestNG它对测试依赖项有很好的内置支持。您可以编写这样的测试,

@Test{dependsOnMethods = ("test_readCsv"))
public void test_readCsv_duplicateColumnName() {
   ...
}

最佳答案

就我个人而言,我不担心在单元测试之间创建依赖关系。对我来说,这听起来有点代码味道。几点:

  • 如果测试失败,让其他测试失败,并充分了解不利的代码更改所造成的问题的严重程度。
  • 测试失败应该是异常(exception)而不是常态,那么当绝大多数时间(希望如此!)没有带来任何好处时,为什么还要浪费精力并创建依赖关系呢?如果失败经常发生,那么您的问题不在于单元测试依赖项,而在于频繁的测试失败。
  • 单元测试应该运行得非常快。如果它们运行缓慢,那么请将精力集中在提高这些测试的速度上,而不是防止后续失败。通过进一步解耦代码并使用依赖项注入(inject)或模拟来实现此目的。

关于python - 单元测试与测试之间的依赖关系,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3843171/

相关文章:

visual-studio - 如何在 Visual Studio 中组织大型项目(>300 个类)的 F# 源代码?

python - 编译 OpenCV - Python.h - 找不到 Python.h

java - 模拟和模拟虚拟服务有什么区别?

oracle - PL/SQL的单元测试

javascript - 如何在单元测试中的请求之间更改 $httpBackend when[method] 语句?

java - 项目或文件夹不显示 Eclipse 源/组织导入选项

c - #include source (*.c *.cpp) 文件有什么好的理由吗?

python - 运行测试时 Django 用户不在请求对象中

python - 在kivy中的类(屏幕)之间传递值

python - 使用python增加图像中特定像素的亮度