2011-06-10 4 views
3

J'ai quelques problèmes avec le code de débogage d'unittest dans Django.
Alors que je lance unittest, j'ai sortieDebugging unittests

FAIL: test_basket (api.api_1_0.tests.basket_tests.BasketTest) 
---------------------------------------------------------------------- 
Traceback (most recent call last): 
    File "/home/dasm/apps/filmaster/reloaded/film20/api/api_1_0/tests/basket_tests.py", line 13, in test_basket 
    self.assertEquals(status, 200) 
AssertionError: 400 != 200 

mais quand exécuter mon collègue le même test, il se

2011-06-10 14:58:33,221 - WARNING:notification.models - No module named APNSWrapper - @<module>/96 
/home/michuk/djcode/filmaster-reloaded/piston/handler.py:36: UserWarning: Handler already registered for model ChannelScreenings, you may experience inconsistent results. 
    "you may experience inconsistent results." % new_cls.model.__name__) 
2011-06-10 14:58:33,844 - ERROR:film20.api.api_1_0.handlers - extra() got an unexpected keyword argument 'join' - @error_handler/93 
Traceback (most recent call last): 
    File "/home/michuk/djcode/filmaster-reloaded/piston/resource.py", line 164, in __call__ 
    result = meth(request, *args, **kwargs) 
    File "/home/michuk/djcode/filmaster-reloaded/film20/api/api_1_0/handlers.py", line 161, in wrapper 
    return view(self, request, request.username, *args, **kw) 
    File "/home/michuk/djcode/filmaster-reloaded/film20/api/api_1_0/handlers.py", line 1051, in read 
    return paginated_collection(request, BasketItem.objects.user_items(username, type).select_related('user', 'film')) 
    File "/home/michuk/djcode/filmaster-reloaded/film20/filmbasket/models.py", line 67, in user_items 
    join=['LEFT OUTER JOIN "core_recommendation" ON ("filmbasket_basketitem"."film_id" = "core_recommendation"."film_id" and "filmbasket_basketitem"."user_id" = "core_recommendation"."user_id")'], 
TypeError: extra() got an unexpected keyword argument 'join' 

Failure 
Traceback (most recent call last): 
    File "/usr/local/lib/python2.6/dist-packages/django/utils/unittest/case.py", line 339, in run 
    testMethod() 
    File "/home/michuk/djcode/filmaster-reloaded/film20/api/api_1_0/tests/basket_tests.py", line 15, in test_basket 
    self.assertEquals(status, 200) 
    File "/usr/local/lib/python2.6/dist-packages/django/utils/unittest/case.py", line 520, in assertEqual 
    assertion_func(first, second, msg=msg) 
    File "/usr/local/lib/python2.6/dist-packages/django/utils/unittest/case.py", line 513, in _baseAssertEqual 
    raise self.failureException(msg) 
AssertionError: 400 != 200 

Comme vous pouvez le voir, la deuxième stacktrace est beaucoup plus efficace de celui-là, que j'ai. Puis-je modifier mes paramètres (ou installer quelque chose) pour développer mon stacktrace?

modifier:
OS: Ubuntu 11.04
Python: 2.7.1
pdb installé

Répondre

1

Je ne suis pas tout à fait sûr qu'il est d'obtenir plus d'informations que vous. C'est peut-être simplement que plus de choses échouent pour lui, à cause de modules manquants ou de quelque chose sur sa configuration.

Ce que vous voyez est exactement ce que vous devriez voir. C'est un échec, donc ce n'est pas techniquement un bug dans votre unittest mais plutôt un bug dans votre code qui est en train d'être testé. La méthodologie traditionnelle consiste à écrire le test, à le regarder échouer, puis à écrire la fonction et à la regarder passer. Si vous êtes en train de déboguer vos tests, ce genre de défaites le point de l'exercice.

+0

J'ai déjà corrigé le premier avertissement, donc notre stacktrace est différent dans cette partie, mais le reste du code est exactement le même. Nous migrons de Django 1.1 (avec join hack) vers Django 1.3 alors unittest me montre que quelque chose ne va pas. La deuxième piletrace indique l'endroit exact où unittest a échoué: File "/home/michuk/djcode/filmaster-reloaded/film20/filmbasket/models.py", line 67 TypeError: extra() got an unexpected keyword argument 'join' lors de la première apparition de l'information, ce test a échoué. Je voudrais avoir un retraçage complet, car la recherche d'éléments corrompus serait beaucoup plus facile. –