【问题标题】:Non-test methods in a Python TestCasePython TestCase 中的非测试方法
【发布时间】:2011-08-05 18:39:57
【问题描述】:

好的,因为 Google 搜索在一段时间内对我没有帮助(即使使用正确的关键字)。

我有一个从 TestCase 扩展的类,我希望有一些辅助方法不会作为测试的一部分执行,它们将用于生成一些模拟对象等,几乎任何辅助方法测试。

我知道我可以使用 @skip 装饰器,因此 unittest 不会运行特定的测试方法,但我认为这是一个丑陋的 hack 用于我的目的,有什么提示吗?

在此先感谢社区:D

【问题讨论】:

  • 单元测试不只对以“test_”开头的方法运行测试吗?

标签: python unit-testing


【解决方案1】:

我相信你不必做任何事情。您的辅助方法不应以 test_ 开头。

【讨论】:

  • @piva:阅读 docs.python.org/library/unittest.html 的 unittest 文档,特别是“TestLoader 使用 'test' 方法名称前缀自动识别测试方法。”
  • @daveydave400 是的,我的愚蠢问题,但我的眼睛匆忙地浏览了文本
  • /aside 时不时地,我忘记在测试方法前加上test_,我花了一段时间才弄清楚为什么它没有被测试运行器运行。跨度>
  • 来自 Java 背景:我不明白为什么 unittest 不使用 @decorator 进行测试,就像 JUnit 4 一样,它比名称上的一些约定更具可读性和简洁性。 .
【解决方案2】:

unittest 将执行的唯一方法 [1] 是 setUp,以 test 开头的任何方法,以及 tearDown [2],按此顺序。你可以制作辅助方法并调用它们,除了这三件事之外,它们不会被 unittest 执行。

您可以将setUp 视为__init__:如果您要生成用于多个测试的模拟对象,请在setUp 中创建它们。

def setUp(self):
    self.mock_obj = MockObj()

[1]:这并不完全正确,但这些是您在编写测试时可以专注的主要 3 组方法。

[2]:由于遗留原因,unittest 将同时执行test_footestFoo,但test_foo 是目前首选的样式。 setUptearDown 应该这样显示。

【讨论】:

    【解决方案3】:

    测试运行器只会直接执行以test 开头的方法,因此请确保您的辅助方法名称不以test 开头。

    【讨论】:

      猜你喜欢
      • 2011-02-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-12-19
      • 1970-01-01
      • 1970-01-01
      • 2020-05-24
      • 1970-01-01
      相关资源
      最近更新 更多