88 votes

Comment définir self.maxDiff dans nose pour obtenir une sortie complète des différences ?

Lorsque j'utilise nose 1.2.1 avec Python 3.3.0, j'obtiens parfois un message d'erreur similaire au suivant

======================================================================
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)

Dans de nombreuses situations, pour déterminer la nature réelle de l'erreur, j'ai besoin de voir le résultat complet de la comparaison. Cependant, je n'ai aucune idée de la façon dont on peut configurer cela. self.maxDiff . La recherche de nez et de maxDiff sur Google ne donne rien. Avec la même version de nose sur Python 2.7.1, la différence complète est imprimée à l'écran.

Voici un simple script qui génère l'erreur ci-dessus lorsqu'il est exécuté avec 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)

124voto

Lennart Regebro Points 52510

Vous mettez maxDiff a None .

Mais vous devrez effectivement utiliser un unittest.TestCase pour vos tests pour que cela fonctionne. Cela devrait fonctionner.

class MyTest(unittest.TestCase):

    maxDiff = None

    def test_diff(self):
          <your test here>

35voto

Dobes Vandermeer Points 1846

Cela fonctionne dans python 2.7 :

    from unittest import TestCase
    TestCase.maxDiff = None

Il définira le maxDiff par défaut pour toutes les instances TestCase, y compris celle à laquelle assert_equals et ses amis sont attachés.

28voto

vicvicvic Points 1684

J'ai eu le même problème dans Python 3 (après avoir lu les autres réponses ici) et en utilisant im_class n'a pas fonctionné. Le snippet ci-dessous fonctionne en Python 3 (cf. Comment trouver l'instance d'une méthode liée en Python ? ) :

assert_equal.__self__.maxDiff = None

Comme @Louis l'a commenté, les fonctions de commodité sont méthodes liées sur un Dummy instance. Ils semblent tous être sur la même instance, donc en changeant ceci pour par exemple assert_equal le changera pour assert_dict_equal et cetera. Du Documentation Python , __self__ est disponible à partir de Python 2.6 et plus.

4voto

Memke Points 518

Voilà (ce que google m'a dit) :

# 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

2voto

quodlibetor Points 2538

Dans python 2.7.3, nose 1.3.0, la procédure suivante fonctionne pour moi :

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

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X