防止自定义断言在Python单元测试的回溯中显示 [英] Prevent custom assert from showing in traceback of python unittest
本文介绍了防止自定义断言在Python单元测试的回溯中显示的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
我想将一些自定义断言方法添加到TestCase中。作为一个简单的例子,我刚刚在下面的测试类中放置了一个。它按预期工作,但在生成输出时,回溯会在输出中包含自定义断言。
需要采取什么步骤才能使其行为类似assertEquity()?AssertEquity的代码在TestCase中,但引发断言的实际行并不出现在回溯中。我需要做什么才能使test_omething2的输出看起来更像test_omething1的输出?
import unittest
class TestCustomAssert(unittest.TestCase):
def assertSomething(self, s):
self.assertEqual(s, 'something')
def test_something1(self):
self.assertEqual('foo', 'something')
def test_something2(self):
self.assertSomething('foo')
if __name__ == '__main__':
unittest.main()
输出
python3 custom_assert.py
FF
======================================================================
FAIL: test_something1 (__main__.TestCustomAssert)
----------------------------------------------------------------------
Traceback (most recent call last):
File "custom_assert.py", line 8, in test_something1
self.assertEqual('foo', 'something')
AssertionError: 'foo' != 'something'
- foo
+ something
======================================================================
FAIL: test_something2 (__main__.TestCustomAssert)
----------------------------------------------------------------------
Traceback (most recent call last):
File "custom_assert.py", line 10, in test_something2
self.assertSomething('foo')
File "custom_assert.py", line 6, in assertSomething
self.assertEqual(s, 'something')
AssertionError: 'foo' != 'something'
- foo
+ something
----------------------------------------------------------------------
Ran 2 tests in 0.000s
FAILED (failures=2)
推荐答案
unittest
不打印全局变量__unittest=True
中包含__unittest=True
的帧的回溯。
发件人unittest.result
:
def _is_relevant_tb_level(self, tb):
return '__unittest' in tb.tb_frame.f_globals
因此,如果您创建了一个助手模块,则可以模拟该行为:
helper.py:
__unittest = True
def assert_stuff(s):
assert s == 'something', "%s is not something" % s
现在您可以从测试用例中调用此帮助器。
我想人们可以制作一个非常巧妙的装饰器,在没有助手模块的情况下使这种魔术变得更加自动化,但无论如何你都不应该努力减少回溯。
这篇关于防止自定义断言在Python单元测试的回溯中显示的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!
查看全文