使用子测试区分测试迭代
class NumbersTest(unittest.TestCase):
def test_even(self):
"""
Test that numbers between 0 and 5 are all even.
"""
for i in range(0, 6):
with self.subTest(i=i):
self.assertEqual(i % 2, 0)
输出:
FAIL: test_even (__main__.NumbersTest) (i=1)
----------------------------------------------------------------------
Traceback (most recent call last):
File "subtests.py", line 32, in test_even
self.assertEqual(i % 2, 0)
AssertionError: 1 != 0
======================================================================
FAIL: test_even (__main__.NumbersTest) (i=3)
----------------------------------------------------------------------
Traceback (most recent call last):
File "subtests.py", line 32, in test_even
self.assertEqual(i % 2, 0)
AssertionError: 1 != 0
======================================================================
FAIL: test_even (__main__.NumbersTest) (i=5)
----------------------------------------------------------------------
Traceback (most recent call last):
File "subtests.py", line 32, in test_even
self.assertEqual(i % 2, 0)
AssertionError: 1 != 0
如果不使用子测试,则在第一次失败后执行将停止,并且错误将不太容易诊断,因为i的值将不会显示。
当我使用pytest运行上面的代码时,我看不到哪个测试失败了,pytest不支持这个特性吗?
1条答案
按热度按时间rjjhvcjd1#
你应该考虑参数化测试,而不是在测试用例中运行for循环。这是pytest为不同的输入值生成同一测试的多个示例的方式。
https://docs.pytest.org/en/stable/parametrize.html
该页中的第一个示例显示:
运行时,调用
test_eval
三次,如下所示:与unittestsubTests类似,如果这些调用中的任何一个失败,其他调用仍然会运行。