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

2024-09-26 22:08:46 发布

您现在位置:Python中文网/ 问答频道 /正文

在Python unittest框架中,如果没有引发异常,是否有方法通过单元测试,否则使用AssertRaise失败?


Tags: 方法框架单元测试unittestassertraise
3条回答

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

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')

…更好,因为它测试系统的所需行为,如果引发异常,它将失败。

只需调用您的功能,例如do_something()。如果引发未处理的异常,测试将自动失败!真的没有理由做别的事。这也是assertDoesNotRaise()不存在的原因。


信贷:斯文评论

本页上的许多评论都将错误和失败视为等价的,而事实并非如此。在我看来,正确的解决方案是在引发异常时显式地使测试失败。E、 g.:

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

相关问题 更多 >

    热门问题