TestCase1つを除くすべてのテストメソッドが同じ方法でオブジェクトにパッチを適用する必要があるPythonクラスがあります。他のメソッドには、同じオブジェクトからの他の動作が必要です。私はモックを使用しているので、次のようにしました。
@mock.patch('method_to_patch', mock.Mock(return_value=1))
class Tests(TestCase):
@mock.patch('method_to_patch', mock.Mock(return_value=2))
def test_override(self):
(....)
しかし、それは機能していません。がtest_override実行されると、クラスデコレータからパッチが適用された動作が呼び出されます。
多くのデバッグを行った後、TestSuiteビルド中に@patchアラウンドtest_overrideがアラウンドの前に呼び出されTests、mockパッチを順番に適用するため、クラスデコレータがメソッドデコレータをオーバーライドしていることがわかりました。
この順序は正しいですか?私は反対のことを期待していましたが、パッチを無効にする方法がよくわかりません...多分withステートメントで?