依存関係を正しく模倣する方法

私のコードはいくつかの独立したクラスとして編成されています。各依存関係はセッターによって注入されるので、最後に
B および C クラスのインスタンスを作成し、パラメータを設定して
A >。

今度は A クラスを単独でテストしたいので、最初の直感は B
C のモックを作成することです。私の問題は、 BC
のメソッドが異なるパラメータで複数回呼び出され、異なる結果を返すことです。どうすればそれを嘲笑することができますか?

擬似コード:

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でモック/テストを更新する必要があります。

返信を残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です