在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'
但我想通过评估换行符'\ 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
'
答案 0 :(得分: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
这并没有给出你想要的输出(在字符串的开头没有添加额外的换行符),但它非常接近。
答案 1 :(得分:1)
使用换行符获取类似输出的最简单方法是直接为每个assertMultiLineEqual
相等比较调用str
或将其注册为类型特定的方法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
使用difflib
,以便输出突出显示两个字符串不同的地方,您可能会或可能不会找到这些地方。