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'}されます。