14.5 忽略或期望测试失败¶
问题¶
ä½ æƒ³åœ¨å�•元测试ä¸å¿½ç•¥æˆ–æ ‡è®°æŸ�些测试会按照预期è¿�行失败。
解决方案¶
unittest 模�有装饰器�用�控制对指定测试方法的处�,例如:
import unittest
import os
import platform
class Tests(unittest.TestCase):
def test_0(self):
self.assertTrue(True)
@unittest.skip('skipped test')
def test_1(self):
self.fail('should have failed!')
@unittest.skipIf(os.name=='posix', 'Not supported on Unix')
def test_2(self):
import winreg
@unittest.skipUnless(platform.system() == 'Darwin', 'Mac specific test')
def test_3(self):
self.assertTrue(True)
@unittest.expectedFailure
def test_4(self):
self.assertEqual(2+2, 5)
if __name__ == '__main__':
unittest.main()
å¦‚æžœä½ åœ¨Mac上è¿�行这段代ç �ï¼Œä½ ä¼šå¾—åˆ°å¦‚ä¸‹è¾“å‡ºï¼š
bash % python3 testsample.py -v
test_0 (__main__.Tests) ... ok
test_1 (__main__.Tests) ... skipped 'skipped test'
test_2 (__main__.Tests) ... skipped 'Not supported on Unix'
test_3 (__main__.Tests) ... ok
test_4 (__main__.Tests) ... expected failure
----------------------------------------------------------------------
Ran 5 tests in 0.002s
OK (skipped=2, expected failures=1)
讨论¶
skip() 装饰器能被用æ�¥å¿½ç•¥æŸ�ä¸ªä½ ä¸�想è¿�行的测试。
skipIf() 和 skipUnless()
å¯¹äºŽä½ å�ªæƒ³åœ¨æŸ�个特定平å�°æˆ–Python版本或其他ä¾�èµ–æˆ�ç«‹æ—¶æ‰�è¿�行测试的时候é�žå¸¸æœ‰ç”¨ã€‚
使用 @expected 的失败装饰器æ�¥æ ‡è®°é‚£äº›ç¡®å®šä¼šå¤±è´¥çš„æµ‹è¯•ï¼Œå¹¶ä¸”å¯¹è¿™äº›æµ‹è¯•ä½ ä¸�想让测试框架打å�°æ›´å¤šä¿¡æ�¯ã€‚
忽略方法的装饰器还�以被用�装饰整个测试类,比如:
@unittest.skipUnless(platform.system() == 'Darwin', 'Mac specific tests')
class DarwinTests(unittest.TestCase):
pass