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

kya*_*chi 5 python

在 Mac OS X 的终端上。

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'
Run Code Online (Sandbox Code Playgroud)

但我想通过评估换行符 '\n' 并在 'AssertionError:' 之后添加换行符来获得以下输出。

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

Blc*_*ght 1

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

转义换行符来自对两个字符串的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
Run Code Online (Sandbox Code Playgroud)

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