次のような状況があります
@attrs(auto_attribs=True)
class ExampleClass:
_prop: OtherClass = attrib(init=False, default=OtherClass())
def some_func(self):
test_var = OtherClass()
test_var.some_func()
self._prop.some_func()
class OtherClass:
def some_func(self):
raise NotImplementedException
def test_example(mocker):
mocker.patch("path.to.example_class.OtherClass")
sut = ExampleClass()
sut.some_func()
すべてのクラスとテストは異なるファイルにあり、モッカーは pytest_mock によって提供されるフィクスチャであり、クリーンアップを簡単に処理する unittest.mock の単なるラッパーです。
私が遭遇した問題は、単体テストを実行しているときに、test_var がパッチ関数から MagicMock として正しく割り当てられていることです。したがって、 test_var.some_func() が返された場合、すべて問題ありません。
がself._prop.some_func()
呼び出されるとNotImplementedException
、パッチがこれに影響を与えていないように見えるため、 が発生します。
私の単体テストでは、設定できsut._prop = MagicMock()
ましたが、これは内部実装の詳細であり、脆弱なテストになっています。
これを回避するために、属性のデフォルト変数をどのようにモックするのですか?