Это должно быть сделано при условии, что ваш метод имеет аргумент 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))
Документирование ограничений аргументов. (Я написал эту главу, поэтому вы можете спросить меня, если не понимаете; -)
При использовании .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
соответственно вы можете реализовать утверждения аргументов при вызове макета.