我想向测试用例添加一些自定义断言方法。作为一个简单的例子,我只是将一个放在下面的测试类中。它按预期工作,但是当生成输出时,回溯在输出中包含自定义断言。
要使其表现得像assertEqual() 所需的步骤是什么? assertEqual 的代码位于 TestCase 中,但引发断言的实际行不会出现在回溯中。我需要做什么才能使 test_something2 的输出看起来更像 test_something1 的输出?
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()
Output
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
在他们的globals.
From unittest.result
:
def _is_relevant_tb_level(self, tb):
return '__unittest' in tb.tb_frame.f_globals
因此,如果您创建一个辅助模块,您可以模拟该行为:
助手.py:
__unittest = True
def assert_stuff(s):
assert s == 'something', "%s is not something" % s
现在您可以从测试用例中调用这个助手。
我想人们可以制作一个非常简洁的装饰器,使这种魔法在没有辅助模块的情况下更加自动化,但恕我直言,无论如何你都不应该努力减少回溯。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)