我正在尝试为我的模块编写一个用 Python 2.7 编写的单元测试,我现在无法迁移到 3.x。我想要的是这个测试做的是检查我的模块是否生成警告日志,如果它生成则捕获它。通过搜索网络和堆栈溢出,我找不到 Python 2.7 的答案。我已经包含了一个简单的可测试代码,您可以使用它来尝试或更好地理解我的问题。
更新:只是为了澄清我愿意改变我的测试用例,即test_warning_2
能够捕获log.warn
该方法的当前实现只是一个占位符。
import logging
import warnings
from unittest import TestCase
def generate_warning_2():
logging.warn("this is a warning")
def generate_warning_1():
warnings.warn("this is a warning")
class TestWarning(TestCase):
def test_warning_1(self):
warnings.simplefilter("always")
with warnings.catch_warnings(record=True) as w:
generate_warning_1()
self.assertEquals(len(w), 1)
def test_warning_2(self):
# Below code is just a place holder, i need some code to replace this so that i can catch `log.warn`
warnings.simplefilter("always")
with warnings.catch_warnings(record=True) as w:
generate_warning_2()
self.assertEquals(len(w), 1)
在这里,如果您看到函数generate_warning_2
,您会注意到我正在使用我的测试用例未捕获的常规 python 日志记录警告。我知道原因是因为它不使用warnings
模块。我只是想展示我想要它做什么。
generate_warning_1
我使用模块捕获警告日志的另一个功能warnings
,这是我当前的实现,效果很好。
我希望能够捕获log.warn
而不是不得不使用warning
来实现这一点。这在 Python 2.7 中可行吗?请不要为 Python 3.x 提供答案,因为我已经知道它可能在那里。
希望我的问题很清楚,请随时向我提问或在适当的地方进行编辑。任何帮助在这里表示赞赏。