4

在 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
'
4

2 回答 2

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

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

于 2013-04-21T05:24:20.797 回答
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,以便输出突出显示两个字符串不同的地方,您可能会或可能不会觉得更可取。

于 2013-04-21T06:58:23.703 回答