python - example - run nosetests
Cómo establecer self.maxDiff en la nariz para obtener la salida de diff completo? (5)
Al usar nose 1.2.1 con Python 3.3.0, a veces recibo un mensaje de error similar al siguiente
======================================================================
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)
En muchas situaciones, para descubrir cuál es realmente el error, necesito ver la salida completa de la diferencia. Sin embargo, no tengo idea de cómo configurar ese self.maxDiff
. Google para nariz y maxDiff no ayuda. Con la misma versión de nose en Python 2.7.1, la diferencia completa se imprime en la pantalla.
Aquí hay un script simple que genera el error anterior cuando se ejecuta con 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)
Aquí lo tienes (lo que Google me dijo):
# 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
En Python 2.7.3, la nariz 1.3.0, haciendo lo siguiente está funcionando para mí:
assert_equal.im_class.maxDiff = None
assert_equal(huge_thing, other_huge_thing)
Estableces maxDiff
en None
.
Pero tendrá que usar un unittest.TestCase
para sus pruebas para que funcione. Esto funciona.
class MyTest(unittest.TestCase):
maxDiff = None
def test_diff(self):
<your test here>
Esto funciona en Python 2.7:
from unittest import TestCase
TestCase.maxDiff = None
Establecerá el maxDiff predeterminado para todas las instancias de TestCase, incluido el que assert_equals y los amigos están conectados.
Tuve el mismo problema en Python 3 (al leer las otras respuestas aquí) y el uso de im_class
no funcionó. El siguiente fragmento funciona en Python 3 (consulte Cómo encontrar una instancia de un método vinculado en Python? ):
assert_equal.__self__.maxDiff = None
Como comentó @Louis, las funciones de conveniencia son métodos vinculados en una instancia Dummy
. Todos parecen estar en la misma instancia, por lo que cambiar esto para, por ejemplo, assert_equal
lo cambiará para assert_dict_equal
et cetera. Desde los documentos de Python , __self__
está disponible desde Python 2.6 y reenviar.