我对使用unittest
的{{1}}进行一些非常相似的测试感兴趣。我发现,当我在subTest
(或pytest
)下运行以此方式编写的测试时,输出中不包含有关个别故障的信息。以docs中的示例为例:
nosetests
如果我运行import unittest
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)
if __name__ == '__main__':
unittest.main()
,它会清楚显示三个失败,如预期的那样:
python test_even.py
但是,如果我运行======================================================================
FAIL: test_even (__main__.NumbersTest) (i=1)
----------------------------------------------------------------------
Traceback (most recent call last):
File "test_even.py", line 10, in test_even
self.assertEqual(i % 2, 0)
AssertionError: 1 != 0
======================================================================
FAIL: test_even (__main__.NumbersTest) (i=3)
----------------------------------------------------------------------
Traceback (most recent call last):
File "test_even.py", line 10, in test_even
self.assertEqual(i % 2, 0)
AssertionError: 1 != 0
======================================================================
FAIL: test_even (__main__.NumbersTest) (i=5)
----------------------------------------------------------------------
Traceback (most recent call last):
File "test_even.py", line 10, in test_even
self.assertEqual(i % 2, 0)
AssertionError: 1 != 0
----------------------------------------------------------------------
Ran 1 test in 0.002s
FAILED (failures=3)
,它只会告诉我该测试失败。我看不到哪些元素失败了:
pytest -v test_even.py
有没有一种方法可以显示出个别故障?理想情况下,我还希望对通过的输出进行某种输出,以确保测试发现正常运行!
答案 0 :(得分:0)
似乎pytest
does not yet support subTest。一种解决方案可能是完全放弃unittest
并编写本机pytest测试:
import pytest
@pytest.mark.parametrize("test_input", range(0, 6))
def test_even(test_input):
assert test_input % 2 == 0
if __name__ == '__main__':
pytest.main([__file__])