2012-01-05 70 views

回答

5

因此,只要调用函数,如果它抛出一个异常将被报告为错误不是一个失败这意味着你的单元测试亚军将停止(没有办法继续的话),如果你想将其报告为失败,你可以这样做:

try: 
    somefunction() 
except: 
    self.fail("....") 
+0

所以我想没有更简单的方法来实现这一点,但通过添加trys/excepts或让它报告错误...谢谢! – 2012-01-05 18:46:19

+0

@JavierNovoaC。很高兴有帮助:) – mouad 2012-01-05 18:48:36

2

如果发生异常,测试将被标记为失败,所以我不明白为什么需要实际声明任何东西。如果你真的想,你永远可以做自己:

try: 
    foo() 
except: 
    raise AssertionError('should not raise exception') 
+0

我通常不用'try' /'except',只是在测试方法底部添加一个注释,比如'#这个测试通过只要没有例外发生' – dcrosta 2012-01-05 18:38:05

+0

好吧,其实如果发生异常时,它将被标记为错误,但是您是对的,它仍被标记。只是想知道是否有一个更清晰的方式来测试这个没有额外的代码(trys/excepts)和没有错误。猜不... – 2012-01-05 18:44:48

0

我遇到了同样的问题,我的单元测试。 mouad &迈克尔是正确的,但更清晰的方式来处理与一致的方法异常断言。

class TestCase(unittest.TestCase): 
    def assertNoRaise(self, callableObj): 
     try: 
      callableObj() 
     except: 
      raise AssertionError('shouldn\'t raise an exception') 

    def assertAnyRaise(self, callableObj): 
     try: 
      callableObj() 
     except: 
      return 
     raise AssertionError('should raise an exception') 

或者单独从继承类继承,并且用mixtest和TestCase做mixin。无论哪种方式会工作

和用例

class my_test(TestCase): 
    def setUp(self): 
     pass 
    def tearDown(self): 
     pass 

    def test_assertion(self): 
     self.assertAnyRaise(lambda: 1+'a') 
     self.assertNoRaise(lambda: 1+1) 

请原谅我的英语不好。

相关问题