0

問題は、ユニットテストのコンテキストにあります。テストしているクラスのインスタンスを作成し、そのメソッドの1つをテストしようとしています。このメソッドは、別のモジュールで定義された異なるクラスから取得したデータを使用します。そのモジュールをモックします。インスタンスの名前空間にアクセスするにはどうすればよいですか?テストしているメソッドを実行する前に、メソッドがデータを取得しているクラスの定義を含むモジュールをモックするためにアクセスする必要がありますか?

4

1 に答える 1

2

ここで、あなたがやろうとしていることと似ていると思う例を作成します。

Datamodule で定義されている、呼び出すクラスがあるとしますfoofooモジュールのインポートと、それ自体を設定するための呼び出しbarのメソッド。foo.Databar.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 に答える