C# Rhinomock在未调用方法时返回值
我想做以下事情 在调用方法之前,某个属性必须始终返回值x 调用方法后,某个属性必须始终返回值y 我熟悉RhinoMocks中的WhenCalled方法,它允许我在调用该方法之后设置返回值,但我想不出在调用之前设置返回值的方法。到目前为止,我有以下代码C# Rhinomock在未调用方法时返回值,c#,rhino-mocks,C#,Rhino Mocks,我想做以下事情 在调用方法之前,某个属性必须始终返回值x 调用方法后,某个属性必须始终返回值y 我熟悉RhinoMocks中的WhenCalled方法,它允许我在调用该方法之后设置返回值,但我想不出在调用之前设置返回值的方法。到目前为止,我有以下代码 counter.Expect(n => n.IncreaseCounter()) .WhenCalled(i => counter.Expect(n => n.GetCounter) .Return(Y).Repeat
counter.Expect(n => n.IncreaseCounter())
.WhenCalled(i => counter.Expect(n => n.GetCounter)
.Return(Y).Repeat.Any());
这可能吗?有两种解决方案:
WhenCalled()
:
GetCounter
返回1
。每次IncreaseConter()
调用都会增加GetCounter
返回的值
PS如果您不打算对
计数器执行断言
,那么可能适合使用Stub()
而不是Expect()
来设置它。有关详细信息,请参见示例。只需在模拟方法的回调中为属性设置新的返回值:
Mock<IFoo> fooMock = new Mock<IFoo>();
fooMock.Setup(foo => foo.Property).Returns(1);
fooMock.Setup(foo => foo.Method())
.Callback(() => fooMock.Setup(x => x.Property).Returns(42));
Mock fooMock=new Mock();
Setup(foo=>foo.Property).Returns(1);
fooMock.Setup(foo=>foo.Method())
.Callback(()=>fooMock.Setup(x=>x.Property).Returns(42));
Mocked属性将返回
1
,直到调用Mocked方法为止。然后其返回值将设置为42
。根据Alexander的解决方案,所有对mocked属性的进一步调用将返回42
。。。以下是我一直在寻找的
var counter = MockRepository.GenerateStub<ICounter>();
int x = 1;
int y = 2;
int cnt = x;
counter
.Stub(c => c.GetCounter)
.Return(0)
.WhenCalled(invocation =>
{
invocation.ReturnValue = cnt;
cnt = y;
});
var counter=MockRepository.GenerateStub();
int x=1;
int y=2;
int cnt=x;
柜台
.Stub(c=>c.GetCounter)
.返回(0)
.WhenCalled(调用=>
{
invocation.ReturnValue=cnt;
cnt=y;
});
Oops,我的坏:)将很快修复Anks Alex,这很有帮助,而且是我想要的。。。稍加修改
Mock<IFoo> fooMock = new Mock<IFoo>();
fooMock.Setup(foo => foo.Property).Returns(1);
fooMock.Setup(foo => foo.Method())
.Callback(() => fooMock.Setup(x => x.Property).Returns(42));
var counter = MockRepository.GenerateStub<ICounter>();
int x = 1;
int y = 2;
int cnt = x;
counter
.Stub(c => c.GetCounter)
.Return(0)
.WhenCalled(invocation =>
{
invocation.ReturnValue = cnt;
cnt = y;
});