Python单元测试assertEqual失败时打印过多信息

3 投票
1 回答
3376 浏览
提问于 2025-04-18 05:02

我在用 nosetests 进行一系列测试时,发现有一个 assertEqual(a,b) 失败了。这个时候,ab(都是很长的字符串)会直接打印出来,占满整个屏幕,导致其他信息都看不清楚。你可以通过在你的测试用例中添加以下代码来模拟这种情况:

def test_my_long_strings(self): 
    self.assertEqual('a'*5000, 'b'*5000)

我尝试过设置 --verbosity=0--debug-log=File,但是这些都没有效果,两个字符串还是会在屏幕上显示出来。

有没有办法让 assertEqual 的输出安静点,或者把它重定向到一个不同的文件,而不是 stderr(因为测试失败或通过的信息也会在这里报告)?

1 个回答

9

assertEqual的第三个参数是一个用于失败时的提示信息。

class TestMyTest(unittest.TestCase):
    def test_example(self):
        a = 'a'
        b = 'b'
        self.assertEqual(a, b, 'a did not equal b')

它会打印出出错位置的调用堆栈信息,以及

AssertionError: a did not equal b

参考资料: https://docs.python.org/2/library/unittest.html#unittest.TestCase.assertEqual

撰写回答