2011-05-25 4 views
2

私は最近、単体テストでNoseを使い始めました。ただし、エラーが発生したときにエラー情報を実際には奇妙な方法で出力することを除いて、かなり良いです。 1行に1文字に分割し、行番号で印刷します。誰にどのようにこれを修正するための任意のアイデアがありますか?Pythonのノーズテスト(実際にはMoxのエラーです)は、1行に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行!

EDIT:

それは私が8時間の自分の質問に答えることはできませんので、私は私が見つけた解決策で編集しています:

アーロンDigullaが指摘するように、問題は鼻ではありませんMox(私はオブジェクトをモックするために使用しています)。

mox.pyでExpectedMethodCallsErrorのSTRメソッドの先頭に次の行を追加すると、(とにかくまたはこの症状)問題が修正されています。

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

答えて

3

をアーロンDigullaは問題が鼻ではなく、(私はモックオブジェクトを使用しています)のモックスではありません指摘しているように。

mox.pyでExpectedMethodCallsErrorのSTRメソッドの先頭に次の行を追加すると、(とにかくまたはこの症状)問題が修正されています。私のシステムで

if isinstance(self._expected_methods, basestring): 
    self._expected_methods = self._expected_methods.split("\n") 
+0

上記はUnicode文字列では機能しません。 strとunicodeの両方を処理するより安全な方法は、isinstance(self._expected_methods、basestring)です。 –

+0

Davideさん、ありがとうございます。 –

2

ExpectedMethodCallsError年代__repr__にエラーがあるようですか__str__方法。

または、期待されるメソッドをmock_objに登録するコード。

+0

おかげで、それは非常に明確モックスからのものとしてそれを示していたとき、私はモックスを、それが問題を引き起こし、鼻だと思っていない理由は、私はわかりません。 –

+0

文字列を渡して 'ExpectedMethodCallsError'をインスタンス化できると仮定しているので、これはノーズのバグではありませんか?ユーザ定義例外のコンストラクタが最初の引数として文字列を受け取る必要はありません。 –

2

私はあなたの問題を直接解決することはできませんが、私は同様の生成方法を知っています。これは、スタックトレースを通じてその鼻の繰り返し処理を思わ:

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

何らかの理由で、lines変数が文字列で、文字列が(ちょうどあなたの場合のように、文字の印刷ごとに1行になる)ラインの代わりに反復されます。問題が何であるかのよう

:私は知りません:)

1

私は、文字列として渡されていたましたユニコード、追加のテストケースがこれをカバーします:

if (isinstance(self._expected_methods, str) or 
    isinstance(self._expected_methods, unicode)): 
    self._expected_methods = self._expected_methods.split("\n") 
関連する問題