1

我有一个带有辅助方法的测试用例assertContains(super, sub)sub参数是测试用例的硬编码部分。如果它们格式不正确,我希望我的测试用例因错误而中止。

我怎么做?我努力了

def assertContains(super, sub):
    if isinstance(super, foo): ...
    elif isinstance(super, bar): ...
    else: assert False, repr(sub)

但是,这会将测试变成失败而不是错误。

我可以提出一些其他异常(例如ValueError),但我想明确声明我正在声明测试用例是错误的。我可以做类似ErrorInTest = ValueErrorthen的事情raise ErrorInTest(repr(sub)),但感觉有点恶心。我觉得应该有一种包含电池的方式来做到这一点,但是阅读友好的手册对我没有任何建议。

4

1 回答 1

1

类中有一个assertRaises()for 方面TestCase,您希望确保待测试代码引发错误。

如果您想在此时引发错误并中止对该单元的测试(并继续下一个单元测试),只需引发未捕获的异常;单元测试模块将捕获它:

raise NotImplementedError("malformed sub: %r" % (sub,))

我认为除了直接引发错误以说明单元测试用例导致错误之外,没有任何其他 API 方面可用。

class PassingTest(unittest.TestCase):
  def runTest(self):
    self.assertTrue(True)

class FailingTest(unittest.TestCase):
  def runTest(self):
    self.assertTrue(False)

class ErrorTest(unittest.TestCase):
  def runTest(self):
    raise NotImplementedError("error")

class PassingTest2(unittest.TestCase):
  def runTest(self):
    self.assertTrue(True)

结果是:

EF..
======================================================================
ERROR: runTest (__main__.ErrorTest)
----------------------------------------------------------------------
Traceback (most recent call last):
  File "./t.py", line 15, in runTest
    raise NotImplementedError("error")
NotImplementedError: error

======================================================================
FAIL: runTest (__main__.FailingTest)
----------------------------------------------------------------------
Traceback (most recent call last):
  File "./t.py", line 11, in runTest
    self.assertTrue(False)
AssertionError: False is not true

----------------------------------------------------------------------
Ran 4 tests in 0.002s

FAILED (failures=1, errors=1)
于 2013-10-01T09:05:52.780 回答