a()
同じモジュールで定義された別の関数を呼び出す( call it ) 関数を持つモジュールがあります ( call it __b()
)。 __b()
経由で Web サイトurllib2
と通信し、データを取得する機能です。今、私は をテストしようとしていますa()
が、もちろん、単体テストで公共のインターネットと通信したくありません。__b()
したがって、定型データを返す関数でモンキー パッチを適用できれば、のテストを記述できると考えていますa()
。
より具体的に言うと、私のモジュールは次のようになります。
def a():
return __b("someval")
def __b(args):
return something_complex_with_args
だから今私はテストしたいのですa()
が、パッチを適用する必要があり__b
ます。問題は、A) モンキー パッチに関する情報のほとんどが、モジュール内の関数ではなく、クラスのメソッドに適用されること、および B) モンキー パッチを適用する関数がプライベートであることです。__b
プロセスがより実現可能になるのであれば、私は非公開に変更しても構わないと思っていますが、そうはなりません。
提案?
編集:現状では、テストクラスは次のようになります。
from unittest import TestCase
import mymodule
def newfn(args):
return {"a" : "b"}
mymodule._b = newfn
class TestMyModule(TestCase):
def test_basic(self):
print(mymodule.a('somearg'))
これを実行すると、出力が表示されるのではなく、サルのパッチがまったく適用されていない場合の出力が表示{'a': 'b'}
されます。