pytest下unittest subTest元素的输出不足

时间:2019-08-07 13:43:43

标签: python pytest python-unittest

我对使用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

有没有一种方法可以显示出个别故障?理想情况下,我还希望对通过的输出进行某种输出,以确保测试发现正常运行!

1 个答案:

答案 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__])