私のコードはいくつかの独立したクラスとして編成されています。各依存関係はセッターによって注入されるので、最後に
B
および C
クラスのインスタンスを作成し、パラメータを設定して
A
>。
今度は A
クラスを単独でテストしたいので、最初の直感は B
と
C
のモックを作成することです。私の問題は、 B
と C
のメソッドが異なるパラメータで複数回呼び出され、異なる結果を返すことです。どうすればそれを嘲笑することができますか?
擬似コード:
b = B()
b.set_param1(value1)
b.set_param2(value2)
c = C()
c.set_param1(value1)
c.set_param2(value2)
a = A()
a.set_b(b)
a.set_c(c)
a.run():
X = self.get_b().method1(x) # should return 1
Y = self.get_b().method2(y) #s hould return 2
Z = self.get_c().method1(z) # should return a complicated dataframe
W = self.get_c().method2(w)# should return yet another complicated dataframe
# process W X Y Z ...
私がPythonで嘲笑して読んだことはすべて、嘲笑がローカルで起こる非常に簡単な例に限られています。
戻り値のシーケンスを設定できることはわかっていますが、これは1つのメソッドに限られており、コードロジックが変更されても将来の証明はできません。
そのような階層をテストすることも可能ですか正しいですか?
ベストアンサー
多くの詳細はありませんが、 unittest.mock
ライブラリは、あなたのためにこれを扱う?私はこれがあなたが「私は戻り値のシーケンスを設定できることを知っていますが、これは単一のメソッドに限られています」と言ったときのことです
未来校正については、Aを単独でテストしようとすると、AとBとの契約が変更されていないことを確認しています。
BとCへのインターフェースが変わったら、それを捕捉するテストがあるので、Aでモック/テストを更新する必要があります。