私はTDDを学び、ユニットテストを学び、モックをPythonで使ってみようとしました。ゆっくりとぶら下がっていますが、これを正しく実行しているかどうかは不明です。私はPython 2.4を使用しています。なぜなら、ベンダーAPIは事前にコンパイルされた2.4 pycファイルになっているからです。したがって、私は模擬0.8.0とunittest(unittest2ではなく)を使用しています。ユニットテストを使ってPythonでモックを正しく使う方法setUp
'mymodule.py '
私のテストケースファイル' test_myclass.py 'では、ldapオブジェクトをモックしたいと思います。 ldap.initializeはldap.ldapobject.SimpleLDAPObjectを返します。だから私はそれを模倣しなければならない方法だと思っていました。
- ん右に見える:
が質問のカップルに私をリード? :)import unittest from ldap import INVALID_CREDENTIALS from mock import patch, MagicMock from mymodule import MyClass class LDAPConnTests(unittest.TestCase): @patch('ldap.initialize') def setUp(self, mock_obj): self.ldapserver = MyClass('myserver','myuser','mypass') self.mocked_inst = mock_obj.return_value def testRaisesMyCustomException(self): self.mocked_inst.simple_bind_s = MagicMock() # set our side effect to the ldap exception to raise self.mocked_inst.simple_bind_s.side_effect = INVALID_CREDENTIALS self.assertRaises(mymodule.MyCustomException, self.ldapserver.connect) def testMyNextTestCase(self): # blah blah
- これは、私がテストしているクラス内でインスタンス化されるオブジェクトをモックしようとする正しい方法ですか?
- setUpで@patchデコレータを呼び出すのは大丈夫ですか?これは奇妙な副作用を引き起こすでしょうか?
- テストケースファイルに例外をインポートせずにldap.INVALID_CREDENTIALS例外を発生させようとする模擬を取得する方法はありますか?
- 代わりにpatch.object()を使用する必要がありますか?
ありがとうございます。
1-3)の代わりに '輸入ldap') 4 ...私には罰金だと' side_effect = ldap.INVALID_CREDENTIALS'を設定しますか? – Chris
あなたはいつも同じテストを行うことができますが、より簡単なオブジェクトを自分で作ってみてください... – shackra