我希望了解如何模拟一个方法,该方法在第二次调用时返回不同的值。例如,类似这样的内容:

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实现子之外?

袁弋雯袁弋雯提问于
独孤求婚windy机器学习回答于
已采纳

您可以用以下方法截取返回值。.WhenCalled方法。注意,您仍然需要通过.Return方法,但是,如果ReturnValue与方法调用不同:

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));

在这种情况下确实有效,可以用来取得同样的结果:

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。

回答过的其他问题

区块链的去中心化理论真的有那么重要?

独孤求婚windy机器学习
对于区块链的去中心化理论,我想说的是重要,非常的重要。 我们可以先来想象一些场景: 如果没有去中心化会发生什么? 场景一: 如果没有去中心化,那么数字货币的发行者就没法自证是否在圈钱,随时有可能携款潜逃,比如现在的金融圈,自从p2p火了以后,携款潜逃的企业不再少数,很多家庭和投...... 展开详请

关系型数据库和非关系型数据库的特性以及优缺点?

独孤求婚windy机器学习
常见的关系型数据库包括SQLite、Oracle、mysql, 它们的特点是: 1、关系型数据库是指采用了关系模型来组织数据的数据库; 2、 事务的一致性是关系型数据库的最大特点; 3、关系模型指的就是二维表格模型,而一个关系型数据库就是由二维表及其之间的联系所组成的一个数据组织...... 展开详请

云计算如何帮助大数据快速完成基础架构?

独孤求婚windy机器学习
首先题主这个问题设计到很多框架类的东西: 在腾讯云上的基础架构服务就有: 数据处理套件TBDS-可以按需部署大数据处理服务实现数据处理需求,例如报表展示,数据提取、分析,客户画像等大数据应用。 弹性MapReduce-提供安全、低成本、高可靠、可弹性伸缩的云端托管 Hadoop ...... 展开详请

Imagick - ImagickException未授权@ error / construct.c / ReadImage / 412错误?

独孤求婚windy机器学习
我今晚想通了。由于我已经升级了我的Ubuntu,因此想象安装了一个新的policy.xml文件,该文件不允许我打开该.pdf文件。 policy.xml位置(Unix) /etc/ImageMagick-6/policy.xml new policy.xml(domain =...... 展开详请

更换我的公网IP时,解绑后无法自动分配公网IP,这个怎么处理呢?

独孤求婚windy机器学习
https://console.cloud.tencent.com/cvm/eip 申请一个弹性公网IP 进行绑定就OK了 image.png ... 展开详请

我的解析地址可以改成IP地址+端口号的形式吗?

独孤求婚windy机器学习

不行 直接解析IP地址 访问 xxx.com:666 这种

所属标签

扫码关注云+社区