在 Python 'unittest' 中,如何在 try 中发生异常/警告后返回一个值 - 除了



这是我的代码。

import unittest
import warnings
def function_that_raises_CustomWarning():
    warnings.warn("warning")
    return True
class test(unittest.TestCase):
    def test(self):
        is_this_True = False
        is_CustomWarning_raised = False
        try:
            is_this_True = function_that_raises_CustomWarning()
        except Warning:
            is_CustomWarning_raised = True
        self.assertTrue(is_this_True)
        self.assertTrue(is_CustomWarning_raised)
if __name__ == "__main__":
    unittest.main()

is_this_True self.assertTrue(is_this_True)False,因此没有通过测试。

我想要的是self.assertTrue(is_this_True)中的is_this_True True.但是,不会"捕获"返回值,因为该值是在 function_that_raises_CustomWarning() 中引发警告返回的。

如何在function_that_raises_CustomWarning()中返回值,同时在except中"捕获"警告?

当我在 Windows 上使用 3.6 运行您的代码时,失败出在 self.assertTrue(is_CustomWarning_raised) . 默认情况下,警告不是例外,无法使用 except: 捕获。 解决方案是使用 assertWarnsassertWarnsRegex . 我使用后者来展示如何使用它来添加额外的测试。

import unittest
import warnings
def function_that_raises_CustomWarning():
    warnings.warn("my warning")
    return True
class test(unittest.TestCase):
    def test(self):
        is_this_True = False
        with self.assertWarnsRegex(Warning, 'my warning'):
            is_this_True = function_that_raises_CustomWarning()
        self.assertTrue(is_this_True)

if __name__ == "__main__":
    unittest.main()

最新更新