테스트 스위트 (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 인스턴스 번만 생성된다. 나는 각 테스트 메소드를 개별적으로 패치 할 수 있지만, 실제로 모든 것을 통해 패치 데코레이터를 복제하고 싶지는 않습니다. (이 예제보다 훨씬 많은 테스트가 있습니다!) 다른 방법으로 내가 할 수있는 것은 패치를 만드는 것입니다.
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
원래 함수 정의를 저장하고 복원하는 것은 모의 작업이 자동으로 수행 할 수있는 것처럼 보입니다. 내가 누락 된 다른 방법이 있나요? 아니면 내 마지막 사례가 이것을하는 가장 좋은 방법인가?
당신이 여기에 있어요 무엇인지 전혀 모른다. 이 질문은 전혀 관련이없는 것처럼 보이며'x = [1, 2] .__ iter __(). next '라고하는 복잡한 방법처럼 보입니다. 당신은 무엇을 말하려고하는? – aquavitae
잘. 당신은 모의 기능을 창조하는 방법을 원합니다. 이제 응답의 순서를 정하십시오. 아니? x = [ "첫 번째 응답", "두 번째 레스포", "... 등"] .__ iter __(). 다음 문제를 해결합니다. – Nasgar
필자는 반복기를 만들고 함수를 모방하는 방법을 알고있다. 내 질문은 모든 테스트 기능에 대해 모의 작업을 다시 설정할 수있는 쉬운 방법이 있는지 여부였다. – aquavitae