如果未引发异常,则传递Python unittest

时间:2011-05-30 23:23:01

标签: python unit-testing

在Python unittest框架中,如果没有引发异常,有没有办法传递单元测试,否则会失败并带有AssertRaise?

3 个答案:

答案 0 :(得分:15)

如果我理解你的问题,你可以做这样的事情:

def test_does_not_raise_on_valid_input(self):
    raised = False
    try:
        do_something(42)
    except:
        raised = True
    self.assertFalse(raised, 'Exception raised')

...假设你有一个相应的测试,当然无效输入会引发正确的Exception

def test_does_raise_on_invalid_input(self):
    self.assertRaises(OutOfCheese, do_something, 43)

但是,正如评论中指出的那样,您需要考虑您实际测试的内容。这可能是像......这样的测试。

def test_what_is_42(self):
    self.assertEquals(do_something(42), 'Meaning of life')

...更好,因为它会测试系统所需的行为,如果 ,则会失败。

答案 1 :(得分:15)

此页面上的许多评论都将错误和失败视为等效,但事实并非如此。我认为正确的解决方案是在引发异常时明确地使测试失败。 E.g:

def test_does_not_error(self):
    try:
        code_under_test()
    except ThatException:
        self.fail("code_under_test raised ThatException")

答案 2 :(得分:2)

正如Sven的评论中所述,只需调用您的功能,例如do_something()。如果引发未处理的异常,则测试会自动失败!没有理由做任何其他事情。这也是assertDoesNotRaise()不存在的原因。