1
NUnit과 Moq을 사용하여 리팩토링을 너무 많이하기 전에 레거시 코드에 대한 테스트를 마무리하려고합니다. 내가 멈추라 고 말할 때까지 메서드가 루핑을 계속하는지 테스트 할 필요가있다. 여기에 내 생각입니다.특정 값을 특정 횟수만큼 반환하도록 Moq를 설정하는 좋은 방법입니까?
[TestCase]
public void KeepsCallingDoSomethingUntilShouldIKeepGoingIsFalse()
{
var dal = new Mock<IDataAccessLayer>();
var sut = new MyService(dal.Object);
int numberOfTimesToReturnTrue = 5;
dal.Setup(x => x.ShouldIKeepGoing())
.Callback(() => numberOfTimesToReturnTrue--)
.Returns(() => numberOfTimesToReturnTrue >= 0);
sut.Blah();
dal.Verify(x => x.DoSomething(), Times.Exactly(5));
}
이 테스트를 이해하기 어렵습니까? 이 작업을 수행하는 데 유효한/깨끗한 방법입니까? 더 좋은 방법이 있습니까? 이 방법으로 테스트를 작성하면 뭔가 저를 괴롭 힙니다.
MoM 3.1.416에서 AtMost 호출을 그렇게 할 수없는 것 같습니다. 이 4.0 베타 버전입니까? 하지만 내 확인에서 시간을 지정해야한다고해도 콜백이 없으면 더 깨끗하다고 생각합니다. 감사합니다. – JohnRudolfLewis
4.0.812.4를 사용 중입니다. – Mark