Тесты носа Python (на самом деле это ошибка от Mox) выводят ошибки по одному символу в строке - PullRequest
2 голосов
/ 25 мая 2011

Я недавно начал использовать Нос для моих юнит-тестов.Это довольно хорошо, за исключением того, что иногда, когда возникает ошибка, она выводит информацию об ошибке очень странным способом.Он разбивает его на 1 символ в строке, а затем печатает с номерами строк.У кого-нибудь есть идеи как это исправить?

....F...............
======================================================================
FAIL: accounts.tests.testaccountserver.test_create_account_writes_an_account_to_the_store
----------------------------------------------------------------------
Traceback (most recent call last):
  File "/home/tom/envs/myappshare/lib/python2.7/site-packages/nose/case.py", line 187, in runTest
    self.test(*self.arg)
  File "/media/Shared/Dropbox/jobs/myapp/myappshare/src/accounts/tests/testaccountserver.py", line 102, in test_create_account_writes_an_account_to_the_store
    mox.VerifyAll()
  File "/home/tom/envs/myappshare/lib/python2.7/site-packages/mox.py", line 286, in VerifyAll
    mock_obj._Verify()
  File "/home/tom/envs/myappshare/lib/python2.7/site-packages/mox.py", line 506, in _Verify
    raise ExpectedMethodCallsError(self._expected_calls_queue)
ExpectedMethodCallsError: Verify: Expected methods never called:
  0.  V
  1.  e
  2.  r
  3.  i
  4.  f
  5.  y
  6.  :
  7.   
  8.  E
  9.  x
 10.  p
 11.  e
 12.  c
 13.  t
 14.  e
 15.  d
 16.   
 17.  m
 18.  e       

И так по 1346 строкам!

РЕДАКТИРОВАТЬ:

Это не позволит мне ответить на мой собственный вопрос в течение 8 часов, поэтому я редактирую решение, которое я нашел:

Как указывает Аарон Дигуллапроблема не в носу, а в Mox (который я использую для Mock объектов).

Добавление этой строки в начало str метода ExpectedMethodCallsError в mox.py решает проблему(или этот симптом в любом случае):

if isinstance(self._expected_methods, str):
  self._expected_methods = self._expected_methods.split("\n")

Ответы [ 4 ]

3 голосов
/ 26 мая 2011

Как отмечает Аарон Дигулла, проблема не в носу, а в Mox (который я использую для насмешки объектов).

Добавление этой строки в начало str метода ExpectedMethodCallsError в mox.py устраняет проблему (или этот симптом в любом случае):

if isinstance(self._expected_methods, basestring):
  self._expected_methods = self._expected_methods.split("\n")
2 голосов
/ 25 мая 2011

Я не могу напрямую решить вашу проблему, но я знаю, как создать подобное.Кажется, что нос перебирает трассировку стека:

for line in lines:
   print "%s" % line

Если по какой-то причине переменная lines является строкой, строка будет повторяться вместо строк (что приведет к печати одной строки на символ, какв вашем случае).

В чем проблема: я не знаю:)

2 голосов
/ 25 мая 2011

Кажется, что есть ошибка в ExpectedMethodCallsError __repr__ или __str__ методе.

Или в коде, который регистрирует ожидаемые методы в mock_obj.

1 голос
/ 02 сентября 2012

В моей системе я обнаружил, что строка передается как Unicode, дополнительный тестовый пример будет охватывать это:

if (isinstance(self._expected_methods, str) or 
    isinstance(self._expected_methods, unicode)):
    self._expected_methods = self._expected_methods.split("\n")
...