私はPython TestCase
クラスを持っていますが、それ以外のすべてのテストメソッドは同じ方法でオブジェクトにパッチを適用する必要があります。他のメソッドは、同じオブジェクトから別の動作を必要とします。私はmockを使用していますので、私はしました: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
ビルド中に、
test_override
周り
@patch
が1周り
Tests
前に呼び出されている、と
mock
が順番にパッチを適用するので、クラスのデコレータはメソッドのデコレータを上書きしていることが分かりました。
この注文は正しいですか?私は反対を期待していたし、パッチをどのようにオーバーライドするかわからない... with
のステートメントでは?
'test_override'が' Tests'に必要ですか?私は 'test_override'と同様のテストのために別の' TestCase'を持っていると思います。すべての 'method_to_patch'が' test_override'のために別のことをしたいのであれば、別の 'TestCase'クラスを持つことが妥当であると想像することもできます。そうすれば、あなたの問題も解決し、コードを他の開発者にとってもっと読みやすくなります(「パッチ適用のパッチ適用」と比較して)。 –
@SimeonVisser 'test_override'を別のクラスに移動することは、テストを構造化するために使用するルールのため、実際にはオプションではありません。それらはすべて同じテストを基準にしたテストなので、1つの 'TestCase' – Gabe