메서드에 int 인수가 있다고 가정하면이 작업을 수행해야합니다.
IDal dalMock = MockRepository.GenerateMock<IDal>();
// setup mock to return the emptyDataSet for any argument
dalMock
.Stub(x => x.GetDataSet(Arg<int>.Is.Anything))
.Return(emptyDataSet)
.Repeat.Any();
sut.Execute()
// assert that the argument had been 7
dalMock.AssertWasCalled(x => x.GetDataSet(Arg<int>.Is.Equal(7))
Documentation of argument constraints.
는 (나는이 장을 썼다, 그래서 당신이 이런 식으로 뭔가 보일 것 .NET 2.0을 사용하여 ;-)
을 이해하지 않는 경우에 당신은 저를 요청할 수 있습니다 :
MockRepository mocks = new MockRepository();
IDal dalMock = mocks.CreateDynamicMock<IDal>();
// expect the correct argument
Expect.Call(dalMock.GetDataSet(Arg<int>.Is.Equal(7)))
.Return(emptyDataSet)
.Repeat.Once();
// setup mock to return the emptyDataSet for any argument
SetupResult.For(dalMock.GetDataSet(Arg<int>.Is.Anything))
.Return(emptyDataSet)
.Repeat.Any();
sut.Execute()
// assert that the argument had been 7
mocks.VerifyAll();
을
작동하는 경우 100 % 확신 할 수는 없지만해야합니다.
당신이 시도 할 수 있습니다 : 모의가 호출 될 때
// setup mock to return the emptyDataSet for any argument
SetupResult.For(dalMock.GetDataSet(Arg<int>.Is.Anything))
.Do((GetDataSetDelegate)delegate(int i)
{
Assert.AreEqual(7, i);
}
.Return(emptyDataSet)
.Repeat.Any();
sut.Execute()
Do
이 실행됩니다. 조롱 된 메서드와 완전히 동일한 인터페이스를 가진 대리자가 필요합니다. .NET 2.0의 구문상의 이유 때문에 올바른 대리자 형식으로 캐스팅해야하므로 먼저 선언해야합니다 (이 경우 GetDataSetDelegate
).
Rhino 3.5 사용자를위한 참고 사항 : 더 편리하게 호출 할 수있는 방법이 있습니다. WhenCalled
은 인수로 람다를 사용하지만 다르게 구현해야합니다.
각각 Do
또는 WhenCalled
으로 모의이 호출되면 인수 어설 션을 구현할 수 있습니다.
팁과 링크를 가져 주셔서 감사합니다. 그래서 나는 논쟁으로 기대를 설정하고 "그 밖의 모든 것"을 가진 스텁을 사용하여 그것을 할 수있는 방법이 없습니까? VS2005에서 .NET 2.0을 사용하기 때문에 람다 및 확장 메서드를 사용할 수 없기 때문에 사용법을 최소화해야합니다. –
이전 구문을 사용할 수 있습니다. 나는 대답에 그것을 추가하려고합니다. –
현재 나는 AAA 구문을 사용하고 있습니다. 방금 사용했습니다 RhinoMocksExtensions.Stub (dal, delegate .Is.Anything); }).반환 (새 DataSet()); 그러나 저는 dal이 항상 메소드를 스텁으로 만들고, 여러분이 제안한 것처럼 "AssertWasCalled"로 기대를 추가 할 것이라고 생각합니다. 다시 한번 감사드립니다. –