【问题标题】:Is there a way to use Python unit test assertions outside of a TestCase?有没有办法在 TestCase 之外使用 Python 单元测试断言?
【发布时间】:2013-08-06 15:32:55
【问题描述】:

我需要创建一个假帮助类以用于单元测试(注入到测试类中)。有没有办法在此类中使用 TestCase 断言?

我想将断言用于 Fake 类执行的一些常见检查。比如:

class FakeFoo(object):

  def do_foo(self, a, b):
    assertNotNull(a)
    ...

【问题讨论】:

  • 如果没有其他方法,内置断言会起作用,但 TestCase 断言更冗长,与内置相比几乎没有优势:stackoverflow.com/q/2958169/1031601
  • 你是对的;我想提供一个参考,以透视其中的一些内容。我没有提出这样的解决方案。感谢您提供第二个链接。 :)

标签: python unit-testing


【解决方案1】:

您可以创建unittest.TestCase() 的实例并调用其上的方法。

import unittest

tc = unittest.TestCase()
tc.assertIsNotNone(a)

在较旧的 Python 版本(Python 2.7 和更早版本、3.0、3.1)上,您需要在类 TestCase 上传递 现有 方法的名称(通常它传递的名称是子类上的测试方法)。 __init__ 在这种情况下会这样做:

tc = unittest.TestCase('__init__')
tc.assertIsNotNone(a)

但是,您可能正在寻找一个好的Mock librarymock 会是个不错的选择。

另一种选择是使用pytest,其中augments assert statements 提供与unittest.TestCase() 断言方法相同或更多的上下文;你只需写assert a is not None

【讨论】:

  • 从 Python 3.2 开始,您不需要在构造函数中传递任何内容。 Documentation: "3.2 版更改: TestCase 可以在不提供 methodName 的情况下成功实例化。这使得从交互式解释器中试验 TestCase 变得更加容易。"
【解决方案2】:

您可以使用 Pytest 或 Nosetest。虽然我不知道他们是否有 'assertNotNull' 功能。我知道他们可以简单地使用“断言”来进行断言。或者你可以使用assertpy或ptest之类的东西,如果你喜欢,你可以在github上搜索它们。

【讨论】:

  • 欢迎来到 SO!请编辑您的问题,并添加例如一些链接和更多解释。
猜你喜欢
  • 2014-08-12
  • 2016-03-30
  • 1970-01-01
  • 1970-01-01
  • 2023-03-31
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多