我正在写一些MyService.aFunction()
并发现一种相当好奇的行为,几乎把我烧死了。
以下测试:
unittest
结果:
import unittest
class Test(unittest.TestCase):
@unittest.skip('Not ready yet')
def test_A(self):
self.assertTrue(False)
@unittest.skip
def test_B(self):
self.assertTrue(False)
def test_C(self):
self.assertTrue(False)
if __name__ == '__main__':
unittest.main()
使用装饰器test_A (__main__.Test) ... skipped 'Not ready yet'
test_B (__main__.Test) ... ok
test_C (__main__.Test) ... FAIL
======================================================================
FAIL: test_C (__main__.Test)
----------------------------------------------------------------------
Traceback (most recent call last):
File "./test.py", line 13, in test_C
self.assertTrue(False)
AssertionError: False is not true
----------------------------------------------------------------------
Ran 3 tests in 0.000s
为空会跳过测试,但会将其报告为已通过。因此,这个跳过的测试可能很容易在第二天被遗忘并永远处于跳过状态。这次跳过背后的原因是什么,但报告传递行为?
如果重要:
答案 0 :(得分:4)
@decorator
def f(): ...
相当于
def f(): ...
f = decorator(f)
和
@decorator(...)
def f(): ...
相当于
def f(): ...
f = decorator(...)(f)
这意味着当您忘记跳过原因时,您将获得
的效果def test_B(self): ...
test_B = unittest.skip(test_B)
测试方法作为跳过原因传递,返回的测试装饰器被分配给test_B
。当unittest
尝试运行test_B
时,测试装饰器不报告断言失败,因此unittest
认为它是通过测试。
@decorator
和@decorator()
的不等同是Python的设计瑕疵之一,但我们无能为力。