¿Cómo configurar self.maxDiff en la nariz para obtener una salida de diferencia completa?

Cuando uso nose 1.2.1 con Python 3.3.0, a veces aparece 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 averiguar cuál es realmente el error, necesito ver la salida de diferencia completa. Sin embargo, no tengo idea de cómo configurar ese self.maxDiff . Google para la nariz y maxDiff no ayuda. Con la misma versión de la nariz 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) 

    Related of "¿Cómo configurar self.maxDiff en la nariz para obtener una salida de diferencia completa?"

    Tuve el mismo problema en Python 3 (de leer las otras respuestas aquí) y el uso de im_class no funcionó. El siguiente fragmento de código funciona en Python 3 (ver ¿Cómo encontrar una instancia de un método enlazado en Python? ):

     assert_equal.__self__.maxDiff = None 

    Como comentó @Louis, las funciones de conveniencia son métodos enlazados 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 etcétera. Desde los documentos de Python , __self__ está disponible desde Python 2.6 y adelante.

    Establece maxDiff en None .

    Pero tendrá que usar realmente un unittest.TestCase para que sus pruebas funcionen. Esto debería funcionar.

     class MyTest(unittest.TestCase): maxDiff = None def test_diff(self):  

    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 se adjuntan assert_equals y amigos.

    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, nariz 1.3.0, hacer lo siguiente me funciona:

     assert_equal.im_class.maxDiff = None assert_equal(huge_thing, other_huge_thing)