如何设置self.maxDiff在鼻子得到充分的diff的输出?

问题描述 投票:53回答:5

当使用鼻1.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想法。谷歌搜索的鼻子和maxDiff没有帮助。随着对Python的相同版本的鼻子2.7.1完全两种打印到屏幕上。

这里是产生在与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)
python nose
5个回答
20
投票

我曾在Python 3同样的问题(从这里读其他的答案),并使用im_class没有工作。下面的代码片段工作在Python 3(参见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和转发。


83
投票

您可以设置maxDiffNone

但是,你有实际使用unittest.TestCase为您测试该工作。这应该工作。

class MyTest(unittest.TestCase):

    maxDiff = None

    def test_diff(self):
          <your test here>

26
投票

这部作品在Python 2.7版:

    from unittest import TestCase
    TestCase.maxDiff = None

它会设置默认maxDiff所有的TestCase的实例,包括assert_equals和朋友都连接到一个。


4
投票

在这里,你有它(是谷歌告诉我的):

# http://pdf2djvu.googlecode.com/hg/tests/common.py
try:
    from nose.tools import assert_multi_line_equal
except ImportError:
    assert_multi_line_equal = assert_equal
else:
    assert_multi_line_equal.im_class.maxDiff = None

2
投票

在蟒蛇2.7.3,1.3.0鼻子,做的是为我工作如下:

assert_equal.im_class.maxDiff = None
assert_equal(huge_thing, other_huge_thing)
© www.soinside.com 2019 - 2024. All rights reserved.