首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >犀牛Mocks:为存根上的方法重新分配一个新结果

犀牛Mocks:为存根上的方法重新分配一个新结果
EN

Stack Overflow用户
提问于 2018-05-30 02:41:03
回答 2查看 0关注 0票数 0

我知道我可以这样做:

代码语言:javascript
复制
IDateTimeFactory dtf = MockRepository.GenerateStub<IDateTimeFactory>();
dtf.Now = new DateTime();
DoStuff(dtf); // dtf.Now can be called arbitrary number of times, will always return the same value
dtf.Now = new DateTime()+new TimeSpan(0,1,0);  // 1 minute later
DoStuff(dtf); //ditto from above

如果不是IDateTimeFactory.Now是一个属性,它是一个方法IDateTimeFactory.GetNow(),我该怎么做同样的事情呢?

按照Judah的建议,我已经重写了我的SetDateTime辅助方法,如下所示:

代码语言:javascript
复制
    private void SetDateTime(DateTime dt) {
        Expect.Call(_now_factory.GetNow()).Repeat.Any();
        LastCall.Do((Func<DateTime>)delegate() { return dt; });
    }

但它仍然会抛出“ICurrentDateTimeFactory.GetNow();的结果已经设置。”

EN

Stack Overflow用户

发布于 2018-05-30 11:23:22

使用你的更新代码,我得到了这个工作:

代码语言:javascript
复制
MockRepository mocks = new MockRepository();

[Test]
public void Test()
{
    IDateTimeFactory dtf = mocks.DynamicMock<IDateTimeFactory>();

    DateTime desiredNowTime = DateTime.Now;
    using (mocks.Record())
    {
        SetupResult.For(dtf.GetNow()).Do((Func<DateTime>)delegate { return desiredNowTime; });
    }
    using (mocks.Playback())
    {
        DoStuff(dtf); // Prints the current time    
        desiredNowTime += TimeSpan.FromMinutes(1);  // 1 minute later    
        DoStuff(dtf); // Prints the time 1 minute from now
    }
}

void DoStuff(IDateTimeFactory factory)
{
    DateTime time = factory.GetNow();
    Console.WriteLine(time);
}
票数 0
EN
查看全部 2 条回答
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/-100000138

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档