TestCase
1つを除くすべてのテストメソッドが同じ方法でオブジェクトにパッチを適用する必要がある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
ステートメントで?