Roy Osherove의 The Art of Unit Testing을 읽는 동안 Rhino-Mocks (3.6)를 실험하기 시작했습니다. 그는 조롱 된 메서드가 같은 매개 변수를 사용하여 두 번 호출 될 때 다른 결과를 반환하도록 스크립팅 할 수 있음을 보여주는 예제가 있습니다.Rhino-Mock 스텁으로 주문 값 반환 값
[Test]
public void ReturnResultsFromMock()
{
MockRepository repository = new MockRepository();
IGetRestuls resultGetter = repository.DynamicMock<IGetRestuls>();
using(repository.Record())
{
resultGetter.GetSomeNumber("a");
LastCall.Return(1);
resultGetter.GetSomeNumber("a");
LastCall.Return(2);
resultGetter.GetSomeNumber("b");
LastCall.Return(3);
}
int result = resultGetter.GetSomeNumber("b");
Assert.AreEqual(3, result);
int result2 = resultGetter.GetSomeNumber("a");
Assert.AreEqual(1, result2);
int result3 = resultGetter.GetSomeNumber("a");
Assert.AreEqual(2, result3);
}
이 작업은 정상적으로 작동합니다. "퍼스트 콜은"이기 때문에,이 테스트는 실패
[Test]
public void StubMethodWithStringParameter_ScriptTwoResponses_SameResponseReceived()
{
MockRepository mocks = new MockRepository();
IMessageProvider stub = mocks.Stub<IMessageProvider>();
using (mocks.Record())
{
stub.GetMessageForValue("a");
LastCall.Return("First call");
stub.GetMessageForValue("a");
LastCall.Return("Second call");
}
Assert.AreEqual("First call", stub.GetMessageForValue("a"));
Assert.AreEqual("Second call", stub.GetMessageForValue("a"));
}
}
public interface IMessageProvider
{
string GetMessage();
string GetMessageForValue(string value);
}
: 나는 스텁하고 받아 문자열을 반환하는 방법으로 같은 일을하려고 할 때, 나는 두 번째 반환 값을 생성 할 수 없습니다입니다 두 통화 모두 수신 됨. 구문의 여러 주름 (mocks.Ordered(), SetResult, Expect 등 사용)을 시도했지만 여전히 두 번째 결과가 나타나지 않습니다.
Rhino-Mocks에서 잘못된 점이 있습니까? 아니면 제한입니까? 이 blog post을 확인했지만 제안 된 구문으로 내 문제가 해결되지 않았습니다.
씨 - 퍼티 @, 감사합니다! Repeat.Once()는 멋지게 작동합니다. –
기사에 +1 ... 나는 잠시 동안 좋은 종합적 설명을 찾고있다. :) –