在Python unittest
框架中,如果没有引发异常,有没有办法传递单元测试,否则会失败并带有AssertRaise?
答案 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()
不存在的原因。