这是我的代码。
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:
捕获。 解决方案是使用 assertWarns
或 assertWarnsRegex
. 我使用后者来展示如何使用它来添加额外的测试。
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()