問題は、ユニットテストのコンテキストにあります。テストしているクラスのインスタンスを作成し、そのメソッドの1つをテストしようとしています。このメソッドは、別のモジュールで定義された異なるクラスから取得したデータを使用します。そのモジュールをモックします。インスタンスの名前空間にアクセスするにはどうすればよいですか?テストしているメソッドを実行する前に、メソッドがデータを取得しているクラスの定義を含むモジュールをモックするためにアクセスする必要がありますか?
1 に答える
2
ここで、あなたがやろうとしていることと似ていると思う例を作成します。
Data
module で定義されている、呼び出すクラスがあるとしますfoo
。foo
モジュールのインポートと、それ自体を設定するための呼び出しbar
のメソッド。foo.Data
bar.get_data()
test
のインスタンスを作成するモジュールを作成したいのですfoo.Data
が、実際のモジュールを使用する代わりに、bar
そのインスタンスでこれのモック バージョンを使用する必要があります。
これを設定するには、テスト モジュールからインポートし、モック バージョンのモジュールにfoo
再バインドします。foo.bar
これがどのように見えるかの例を次に示します。
bar.py:
def get_data(): return 'bar'
foo.py:
import bar class Data(object): def __init__(self): self.val = bar.get_data() if __name__ == '__main__': d = Data() print d.val # prints 'bar'
test.py:
import foo class bar_mock(object): @staticmethod def get_data(): return 'test' if __name__ == '__main__': foo.bar = bar_mock d = foo.Data() print d.val # prints 'test'
これで簡単なテスト ケースを作成できますが、これを処理するためにモック ライブラリを調べた方がよいでしょう。
于 2012-10-03T17:44:09.160 に答える