전체 diff 출력을 얻기 위해 nose에서 self.maxDiff를 설정하는 방법은 무엇입니까?
Python 3.3.0과 함께 nose 1.2.1을 사용할 때 다음과 유사한 오류 메시지가 표시되는 경우가 있습니다.
======================================================================
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에 대한 인터넷 검색은 도움이되지 않습니다. Python 2.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)
나는 파이썬 3에서 (다른 답변을 읽음으로써) 같은 문제가 있었고 사용 im_class
이 작동하지 않았습니다. 아래 스 니펫은 Python 3에서 작동합니다 (참조 : Python에서 바인딩 된 메서드의 인스턴스를 찾는 방법? ).
assert_equal.__self__.maxDiff = None
As @Louis commented, the convenience functions are bound methods on a Dummy
instance. They all seem to be on the same instance, so changing this for e.g. assert_equal
will change it for assert_dict_equal
et cetera. From the Python docs, __self__
is available from Python 2.6 and forward.
You set maxDiff
to None
.
But you will have to actually use a unittest.TestCase
for your tests for that to work. This should work.
class MyTest(unittest.TestCase):
maxDiff = None
def test_diff(self):
<your test here>
This works in python 2.7:
from unittest import TestCase
TestCase.maxDiff = None
It'll set the default maxDiff for all TestCase instances, including the one that assert_equals and friends are attached to.
Here you have it (what google told me):
# 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
In python 2.7.3, nose 1.3.0, doing the following is working for me:
assert_equal.im_class.maxDiff = None
assert_equal(huge_thing, other_huge_thing)
참고URL : https://stackoverflow.com/questions/14493670/how-to-set-self-maxdiff-in-nose-to-get-full-diff-output
'Development Tip' 카테고리의 다른 글
자바 스크립트 개체 키 이름 가져 오기 (0) | 2020.12.03 |
---|---|
pip는 setup.py의 dependency_links를 무시합니다. (0) | 2020.12.03 |
정규식-문자열로 시작 및 끝 (0) | 2020.12.03 |
한 Mac에서 다른 Mac으로 Atom 설치 (패키지 및 설정)를 공유 / 전송하는 방법은 무엇입니까? (0) | 2020.12.03 |
모든 현재 데이터베이스 이름을 찾기위한 SQL Server 쿼리 (0) | 2020.12.03 |