2013-10-01 77 views
1

我有一个测试用例,帮助器方法assertContains(super, sub)sub参数是测试用例的硬编码部分。如果他们格式不正确,我想让我的测试用例中止并出错。如何从python单元测试信号发出测试错误(不是失败)

我该怎么做?我试过

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

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

我可以提出一些其他异常(例如ValueError),但我想明确说明我声明测试用例是错误的。我可以做的事情如ErrorInTest = ValueError然后raise ErrorInTest(repr(sub)),但它感觉有点'icky。我觉得应该采用电池供电的方式来做这件事,但是阅读友好的手册并没有给我提出任何建议。

回答

1

对于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)