【问题标题】:python unittests assertEqual print too much when it failspython unittests assertEqual 失败时打印太多
【发布时间】:2014-06-18 09:50:39
【问题描述】:

在我使用nosetests 运行的一系列测试中,assertEqual(a,b) 失败,ab(相当长的字符串)逐字打印,填满屏幕,混淆其他所有内容。您可以通过将其添加到您的一个测试用例中来创建类似的情况:

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

我尝试设置--verbosity=0--debug-log=File,但都没有任何效果,屏幕上仍然打印两个字符串。

有没有办法关闭 assertEqual 冗长或将其重定向到除 stderr 之外的单独文件(还报告测试失败/通过)?

【问题讨论】:

  • 能把问题测试的代码放上去吗?和输出?什么是too much
  • @Oz123:我还没有真正计算出两个字符串中的字符数。我看起来有数百个 80 字符行。您可以像这样创建类似的测试: def test_my_long_strings(self): self.assertEqual('a'*5000, 'b'*5000) 该测试并不是真正的单元测试,而是基于unittest 模块(不是我写的,我是尝试调试它的用户)。
  • @user2442366 我再次检查,maxDiff 只影响 diff 输出(+/- 部分)。作为带有默认断言消息的异常的一部分显示的字符串不受它的影响。因此,您必须结合使用maxDiff 和@Jimr 在他的回答中提出的建议。
  • @user2442366 为了做到这一点,您可能最好创建自己的TestCase 子类,类似于SilencedTestCase,设置类变量maxDiff,并扩展assertEqual on它始终提供截断字符串的自定义断言消息。

标签: python assert error-logging nosetests python-unittest


【解决方案1】:

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

【讨论】:

    猜你喜欢
    • 2021-03-19
    • 2022-01-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-10-02
    • 1970-01-01
    • 2014-07-01
    • 1970-01-01
    相关资源
    最近更新 更多