gpt4 book ai didi

c# - Rhino Mocks - 通过多次调用模拟其返回值发生变化(即使传递相同参数)的方法

转载 作者:IT王子 更新时间:2023-10-29 04:33:31 25 4
gpt4 key购买 nike

我正在寻找如何模拟一个在第二次调用时返回不同值的方法。例如,像这样:

public interface IApplicationLifetime
{
int SecondsSinceStarted {get;}
}

[Test]
public void Expected_mock_behaviour()
{
IApplicationLifetime mock = MockRepository.GenerateMock<IApplicationLifetime>();

mock.Expect(m=>m.SecondsSinceStarted).Return(1).Repeat.Once();
mock.Expect(m=>m.SecondsSinceStarted).Return(2).Repeat.Once();

Assert.AreEqual(1, mock.SecondsSinceStarted);
Assert.AreEqual(2, mock.SecondsSinceStarted);
}

有什么可以让这成为可能吗?除了为实现状态机的 getter 实现 sub 之外?

最佳答案

您可以使用 .WhenCalled 方法拦截返回值。请注意,您仍然需要通过 .Return 方法提供一个值,但是如果 ReturnValue 从方法调用中更改,Rhino 将简单地忽略它:

int invocationsCounter = 1;
const int IgnoredReturnValue = 10;
mock.Expect(m => m.SecondsSinceLifetime)
.WhenCalled(mi => mi.ReturnValue = invocationsCounter++)
.Return(IgnoredReturnValue);

Assert.That(mock.SecondsSinceLifetime, Is.EqualTo(1));
Assert.That(mock.SecondsSinceLifetime, Is.EqualTo(2));

再深入一点,似乎 .Repeat.Once() 确实 在这种情况下确实有效,并且可用于实现相同的结果:

mock.Expect(m => m.SecondsSinceStarted).Return(1).Repeat.Once();
mock.Expect(m => m.SecondsSinceStarted).Return(2).Repeat.Once();
mock.Expect(m => m.SecondsSinceStarted).Return(3).Repeat.Once();

将在连续调用时返回 1、2、3。

关于c# - Rhino Mocks - 通过多次调用模拟其返回值发生变化(即使传递相同参数)的方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10720908/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com