2

我最近开始使用 Nose 进行单元测试。它非常好,只是有时当发生错误时,它会以一种非常奇怪的方式打印出错误信息。它把它分成每行 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 小时内回答我自己的问题,所以我正在编辑我找到的解决方案:

正如 Aaron Digulla 指出的那样,问题不在于鼻子,而在于 Mox(我用它来模拟对象)。

将此行添加到mox.py 中 ExpectedMethodCallsError的str方法的顶部可以解决问题(或者无论如何都会出现此症状):

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

4 回答 4

3

正如 Aaron Digulla 指出的那样,问题不在于鼻子,而在于 Mox(我用它来模拟对象)。

将此行添加到mox.py 中 ExpectedMethodCallsError的str方法的顶部可以解决问题(或者无论如何都会出现此症状):

if isinstance(self._expected_methods, basestring):
  self._expected_methods = self._expected_methods.split("\n")
于 2011-05-26T08:55:17.717 回答
2

ExpectedMethodCallsError's __repr__or__str__方法似乎有错误。

或者在注册预期方法的代码中mock_obj

于 2011-05-25T12:06:28.537 回答
2

我不能直接解决你的问题,但我知道如何生成类似的。鼻子似乎遍历堆栈跟踪:

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

如果由于某种原因,变量lines是一个字符串,则该字符串将被迭代而不是行(就像您的情况一样,每个字符打印一行)。

至于问题是什么:我不知道:)

于 2011-05-25T12:08:01.037 回答
1

在我的系统上,我发现字符串作为 unicode 传入,一个额外的测试用例将涵盖这一点:

if (isinstance(self._expected_methods, str) or 
    isinstance(self._expected_methods, unicode)):
    self._expected_methods = self._expected_methods.split("\n")
于 2012-09-02T15:12:35.727 回答