Python:self.assertEqual(a,b,msg) - >我想要diff和msg

gue*_*tli 6 python unit-testing pytest python-2.7 python-unittest

如果我这样称呼它,我会看到一个很好的差异:

self.assertEqual(a, b)
Run Code Online (Sandbox Code Playgroud)

如果我这样称呼它,我只看到msg:

self.assertEqual(a, b, msg)
Run Code Online (Sandbox Code Playgroud)

有没有一种简单的方法来显示差异和消息?

实现assertEqual()自己会起作用,但我问自己这是否真的是最好的方法.

Plattform:Python2.7和pytest 2.6.2.

fal*_*tru 5

如果您设置longMessageattribute True,您将看到两条消息。

例:

class TestFoo(unittest.TestCase):

    longMessage = True  # <--

    def test_foo(self):
        self.assertEqual(1+2, 2, 'custom message')
Run Code Online (Sandbox Code Playgroud)

输出:

F
======================================================================
FAIL: test_foo (__main__.TestFoo)
----------------------------------------------------------------------
Traceback (most recent call last):
  File "t.py", line 6, in test_foo
    self.assertEqual(1+2, 2, 'custom message')
AssertionError: 3 != 2 : custom message

----------------------------------------------------------------------
Ran 1 test in 0.000s
Run Code Online (Sandbox Code Playgroud)

  • 对于Python3,longMessage的默认值已更改为更好的默认值True:https://docs.python.org/3/library/unittest.html#unittest.TestCase.longMessage (2认同)

The*_*ler 2

由于您使用的是 pytest,因此您还可以使用 pytest 的简单断言而不是单元测试兼容性:

def test_foo():
    assert "abcdefg" == "abcde", "My message"
Run Code Online (Sandbox Code Playgroud)

输出:

====================== FAILURES ======================
______________________ test_foo ______________________

    def test_foo():
>       assert "abcdefg" == "abcde", "My message"
E       AssertionError: My message
E       assert 'abcdefg' == 'abcde'
E         - abcdefg
E         ?      --
E         + abcde
Run Code Online (Sandbox Code Playgroud)