如何使用python更改断言错误的输出?

2024-09-30 12:29:48 发布

您现在位置:Python中文网/ 问答频道 /正文

在macosx的终端上

assertEqual的输出是

  File "tests/test_conditions.py", line 27, in test_if_condition
    self.assertEqual(result, expected)
AssertionError: '    if (self) {\n        self.addMainLabel\n        self.addSubLabel\n        self.setupBackground\n    }\n' != '    if self\n        self.addMainLabel\n        self.addSubLabel\n        self.setupBackground\n    end\n'

但我希望得到以下输出,计算换行符“\n”,并在“AssertionError:”之后添加换行符。在

^{pr2}$

Tags: pytestself终端iflinetestsmacosx
2条回答

使用换行符获得类似的输出的最简单方法是为每个str直接调用assertMultiLineEqual,或者将其注册为assertEqual的类型特定方法。你可以通过在你的设置中使用这个来实现后者

self.addTypeEqualityFunc(str, 'assertMultiLineEqual')

然后,当您在两个字符串上调用assertEqual时,您将得到如下结果:

^{pr2}$

unittest使用^{}以便输出突出显示这两个字符串不同的地方,这可能是您认为最好的,也可能不是最好的。在

我不认为你能,至少,不容易。在

转义的新行来自两个字符串中每一个的assertEqual调用repr。没有它,你也不会得到引文标记。如果您的字符串中有一个包含!=,那么它将变得非常混乱。在

如果你真的想篡改断言的文本,你可以捕捉它,操作它的属性,然后重新读取它。我不建议这样做,但有可能:

try:
    self.assertEquals(result, expected)
except AssertionError as e:
    e.args = (e.args[0].replace("\\n", "\n"),) # edit the exception's message
    raise

这并不能精确地给出您想要的输出(在字符串的开头没有添加额外的新行),但是它非常接近。在

相关问题 更多 >

    热门问题