テスト スイート (unittest ではなく、nose を使用) があり、関数にパッチを適用して、テスト クラスのすべてのテストに対して特定のシーケンスの値を返したいと考えています。簡単な例を使用した私の最初の試みは次のとおりです。
@patch('time.clock', MagicMock(side_effects=[1, 2]))
class Tests:
def test_1(self):
assert time.clock() == 1
assert time.clock() == 2
def test_2(self):
assert time.clock() == 1
assert time.clock() == 2
ただし、MagicMock インスタンスは 1 回しか作成されないため、副作用がなくなると 2 番目のテストは失敗します。各テスト メソッドに個別にパッチを適用することはできますが、パッチ デコレータをすべてのメソッドに複製したくはありません (この例よりもはるかに多くのテストがあります!)次のようなセットアップコード:
class Tests:
def setup(self):
self.old_clock = time.clock
time.clock = MagicMock(side_effects=[1, 2])
def teardown(self):
time.clock = self.old_clock
def test_1(self):
assert time.clock() == 1
assert time.clock() == 2
def test_2(self):
assert time.clock() == 1
assert time.clock() == 2
しかし、元の関数定義の保存と復元は、Mock が自動的に実行できるように思えます。私が見逃しているこれを行う別の方法はありますか?または、私の最後の例はこれを行うための最良の方法ですか?