繁体   English   中英

如何从python unittest发出测试错误(不是失败)的信号

[英]How do I signal test error (not failure) from python unittest

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

我怎么做? 我努力了

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

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

我可能会提出其他一些异常(例如ValueError ),但是我想明确声明我声明测试用例有错误。 我可以做类似ErrorInTest = ValueError事情,然后raise ErrorInTest(repr(sub)) ,但是感觉有点“棘手”。 我觉得应该有一个包括电池在内的方法,但是阅读友好的手册对我没有任何建议。

TestCase类中的各个方面都有一个assertRaises() ,您想在其中确保要测试的代码引发错误。

如果要引发错误并在此时放弃对该单元的测试(并继续进行下一个单元测试),则只需引发未捕获的异常即可; 单元测试模块将捕获它:

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)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM