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

如何使用python更改断言错误的输出?,python,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

在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:”之后添加换行符

  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
'

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

转义的换行符来自对两个字符串中的每个字符串调用
assertEqual
。没有这些,你也不会得到引号。如果您的任一字符串包含
=,它会变得非常混乱

如果您真的想伪造断言的文本,您可以捕获它,操纵它的属性,然后重新验证它。我不建议这样做,但有可能:

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

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

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

self.addTypeEqualityFunc(str, 'assertMultiLineEqual')
然后,当您在两个字符串上调用
assertEqual
时,您将得到如下结果:

Traceback (most recent call last):
  File "tests.py", line 10, in test1
    self.assertEqual(result, expected)
AssertionError: '    if (self) {\n        self.addMainLabel\n        self.addSubLabel\n        s [truncated]... != '    if self\n        self.addMainLabel\n        self.addSubLabel\n        self. [truncated]...
-     if (self) {
?        -    ---
+     if self
          self.addMainLabel
          self.addSubLabel
          self.setupBackground
-     }
+     end

unittest
使用此选项,以便输出突出显示两个字符串不同的位置,您可能会发现这两个位置更可取,也可能不可取。

assertmultileequal
效果良好。但很抱歉,我没有提到python版本。我需要使用Python2.6和Python3.3来实现崇高的文本插件。