나는 아래의 예와 유사한 클래스를 테스트하기 위해 노력하고 있습니다 : 부분 조롱 내 기대를 허용하지 않는 것부분 조롱 - 기대는 무시되고 (코뿔소 모의 객체)
public class Service : IService
{
public string A(string input)
{
int attemptCount = 5;
while (attemptCount > 0)
{
try
{
return TryA(input);
}
catch (ArgumentOutOfRangeException)
{
attemptCount--;
if (attemptCount == 0)
{
throw;
}
// Attempt 5 more times
Thread.Sleep(1000);
}
}
throw new ArgumentOutOfRangeException();
}
public string TryA(string input)
{
// try actions, if fail will throw ArgumentOutOfRangeException
}
}
[TestMethod]
public void Makes_5_Attempts()
{
// Arrange
var _service = MockRepository.GeneratePartialMock<Service>();
_service.Expect(x=>x.TryA(Arg<string>.Is.Anything)).IgnoreArguments().Throw(new ArgumentOutOfRangeException());
// Act
Action act =() => _service.A("");
// Assert
// Assert TryA is attempted to be called 5 times
_service.AssertWasCalled(x => x.TryA(Arg<string>.Is.Anything), opt => opt.Repeat.Times(5));
// Assert the Exception is eventually thrown
act.ShouldThrow<ArgumentOutOfRangeException>();
}
합니다. 테스트를 실행할 때 입력에 대한 오류가 발생합니다. 디버깅 할 때 메소드의 실제 구현이 기대 대신 실행되는 것을 볼 수 있습니다.
이 테스트를 올바르게 수행하고 있습니까? 문서 (http://ayende.com/wiki/Rhino%20Mocks%20Partial%20Mocks.ashx)에 따르면 : "부분 모의는 당신이 그 방법에 대한 기대를 정의하지 않으면 클래스에 정의 된 메소드를 호출 할 것입니다. 만약 당신이 기대를 정의했다면, 이것에 대한 일반적인 규칙을 사용할 것입니다."
'TryA'는 가상 번호 – Steve
@Steve이어야하며 문제가 해결 된 것으로 보입니다. 차라리 함수에 가상을 추가 할 필요는 없겠지만 매우 드물게 발생한다고 생각합니다. 감사! –