에 대한 AssertWasCalled 고정 I가이 같은 비트 (내 실제 문제에서 조금 단순화 해요) 보이는 시험 : 그 Monkey
처분하는 것을 제외하고,코뿔소 모의 객체 : 배치 객체
[Test]
public void Eat_calls_consumption_tracker_OnConsume()
{
var consumptionTrackerStub =
MockRepository.GenerateStub<IConsumptionTracker>();
var monkey = new Monkey(consumptionTrackerStub);
var banana = new Banana();
monkey.Eat(banana);
consumptionTrackerStub.AssertWasCalled(x => x.OnConsume(banana));
}
이 잘 작동 것을 Banana
먹은 후. 따라서 바나나 객체는 더 이상 사용 가능한 상태가 아닙니다. 특히 구현은 해제 된 관리되지 않는 리소스를 사용하기 때문에 Dispose
이 호출 된 후에는 작동하지 않습니다.
불행하게도 AssertWasCalled
은 불려 Banana.Equals
이 호출되어 테스트가 실패하게됩니다. 이 문제를 해결하는 가장 좋은 방법은 무엇입니까?
+1 테스트중인 클래스를 제외한 모든 것을 스텁하는 것이이 문제를 사라지게한다는 것을 이미 알고있었습니다. 불행히도 Monkey와 Banana는 추상화 될 수없는 interop wrappers입니다 - Monkey.Eat 메서드는 관리되는 래퍼를 관리되지 않는 동급 클래스로 전달하기 전에 "분리"하여 특정 클래스의 바나나를 사용합니다 유형. 기존의 관리되지 않는 코드와의 interop에 대한 필요성 때문에 적절한 TDD가 실제로 복잡해집니다. –