2011-06-10 119 views
3

我在調試Django中的unittest代碼時遇到了一些問題。
當我運行單元測試,我有輸出調試單元測試

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 

,但是當我的同事運行相同的測試,他得到

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 

正如你所看到的,第二堆棧跟蹤是更有效的那一個,我有。我可以更改我的設置(或安裝一些東西)來擴展我的堆棧跟蹤嗎?

編輯:
操作系統:Ubuntu的11.04
的Python 2.7.1
PDB安裝

回答

1

我不能完全肯定他變得比你更多的信息。可能只是因爲他的設置中缺少某些模塊或其他東西而導致更多內容失敗。

你所看到的正是你應該看到的。這是一個失敗,所以它在技術上不是單元測試中的錯誤,而是代碼中的錯誤正在被測試。傳統的方法是編寫測試,看它失敗,然後編寫該功能,並觀察它通過。如果你發現自己正在調試你的測試,那麼這種做法就會挫傷練習的重點。

+0

我已經修復了第一個警告,所以我們的堆棧跟蹤在這部分是不同的,但其餘代碼完全一樣。 我們正在從Django 1.1(加入hack)遷移到Django 1.3,所以單元測試表明我出現了問題。第二個堆棧跟蹤顯示單元測試失敗的確切位置:File "/home/michuk/djcode/filmaster-reloaded/film20/filmbasket/models.py", line 67 TypeError: extra() got an unexpected keyword argument 'join' 當第一次只顯示信息時,該測試失敗。 我想有完整的回溯,因爲搜索已損壞的元素會容易得多。 – 2011-06-10 16:08:11