如何使用python更改断言错误的输出?
在macosx的终端上 assertEqual的输出为如何使用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
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来实现崇高的文本插件。