如何在nose中设置self.maxDiff以获得完整的diff输出?

2024-04-24 23:47:28 发布

您现在位置:Python中文网/ 问答频道 /正文

在将nos1.2.1与Python 3.3.0一起使用时,有时会收到类似于下面的错误消息

======================================================================
FAIL: maxdiff2.test_equal
----------------------------------------------------------------------
Traceback (most recent call last):
  File "/usr/local/lib/python3.3/site-packages/nose/case.py", line 198, in runTest
    self.test(*self.arg)
  File "/Users/loic/cmrsj/Calculus_II/scrap/maxdiff2.py", line 32, in test_equal
    assert_equal(str1, str2)
AssertionError: 'Lorem ipsum dolor sit amet, consectetur adipiscing elit. Donec a
diam lectus.\n [truncated]... != 'Suspendisse lectus leo, consectetur in tempor sit
amet, placerat quis neque.\nE [truncated]...
Diff is 1780 characters long. Set self.maxDiff to None to see it.

----------------------------------------------------------------------
Ran 1 test in 0.064s

FAILED (failures=1)

在很多情况下,为了找出错误的真正原因,我需要查看完整的diff输出。但是,我不知道如何设置这个self.maxDiff。搜索nose和maxDiff没有帮助。在Python2.7.1上使用相同版本的nose时,完整的diff会打印到屏幕上。

下面是一个简单的脚本,在使用nosetests-3.3运行时生成上述错误:

from nose.tools import assert_equal

def test_equal():
    str1 = """\
Lorem ipsum dolor sit amet, consectetur adipiscing elit. Donec a diam lectus.
Sed sit amet ipsum mauris. Maecenas congue ligula ac quam viverra nec
consectetur ante hendrerit. Donec et mollis dolor. Praesent et diam eget libero
egestas mattis sit amet vitae augue. Nam tincidunt congue enim, ut porta lorem
lacinia consectetur. Donec ut libero sed arcu vehicula ultricies a non tortor.
Lorem ipsum dolor sit amet, consectetur adipiscing elit. Aenean ut gravida
lorem. Ut turpis felis, pulvinar a semper sed, adipiscing id dolor.
Pellentesque auctor nisi id magna consequat sagittis. Curabitur dapibus enim
sit amet elit pharetra tincidunt feugiat nisl imperdiet. Ut convallis libero in
urna ultrices accumsan. Donec sed odio eros. Donec viverra mi quis quam
pulvinar at malesuada arcu rhoncus. Cum sociis natoque penatibus et magnis dis
parturient montes, nascetur ridiculus mus. In rutrum accumsan ultricies. Mauris
vitae nisi at sem facilisis semper ac in est."""

    str2 = """\
Suspendisse lectus leo, consectetur in tempor sit amet, placerat quis neque.
Etiam luctus porttitor lorem, sed suscipit est rutrum non. Curabitur lobortis
nisl a enim congue semper. Aenean commodo ultrices imperdiet. Vestibulum ut
justo vel sapien venenatis tincidunt. Phasellus eget dolor sit amet ipsum
dapibus condimentum vitae quis lectus. Aliquam ut massa in turpis dapibus
convallis. Praesent elit lacus, vestibulum at malesuada et, ornare et est. Ut
augue nunc, sodales ut euismod non, adipiscing vitae orci. Mauris ut placerat
justo. Mauris in ultricies enim. Quisque nec est eleifend nulla ultrices
egestas quis ut quam. Donec sollicitudin lectus a mauris pulvinar id aliquam
urna cursus. Cras quis ligula sem, vel elementum mi. Phasellus non ullamcorper
urna."""

    assert_equal(str1, str2)

Tags: intestequaletipsumutdoloramet
3条回答

这在Python2.7中有效:

    from unittest import TestCase
    TestCase.maxDiff = None

它将为所有测试用例实例设置默认的maxDiff,包括assert_equals和friends附加到的实例。

我在Python 3中也遇到了同样的问题(从这里阅读其他答案),使用im_class也不起作用。下面的代码片段适用于Python 3(cf.How to find instance of a bound method in Python?):

assert_equal.__self__.maxDiff = None

正如@Louis所评论的,便利函数是一个Dummy实例上的绑定方法。它们似乎都在同一个实例上,因此改变这个值,例如assert_equal将改变assert_dict_equal等。从Python docs__self__可从Python 2.6和forward获得。

您将maxDiff设置为None

但是你必须使用^{}来实现你的测试。这应该管用。

class MyTest(unittest.TestCase):

    maxDiff = None

    def test_diff(self):
          <your test here>

相关问题 更多 >