【问题标题】:Chainable Implementation for MoqMoq 的可链接实现
【发布时间】:2011-10-21 03:21:10
【问题描述】:

那里有 Moq 的可链接实现吗?我在想,而不是这个:

var mockSchedule = new Mock<Schedule>();
mockSchedule.SetupGet(x => x.Date).Returns(new DateTime(2011,6,1));
mockSchedule.SetupGet(x => x.Label).Returns("Schedule A");

我可以这样称呼它:

var mockSchedule = 
    new Mock<Schedule>()
        .Which().SetupGet(x => x.Date).Returns(new DateTime(2011,6,1))
        .Which().SetupGet(x => x.Label).Returns("Schedule A");

或者像这样:

var mockSchedule =
    new Mock<Schedule>().
        .SetupGetWith(x => x.Date,new DateTime(2011,6,1))
        .SetupGetWith(x => x.Label,"Schedule A");

我可以自己编写这些,但如果有现有的实现,我宁愿不重新发明轮子

【问题讨论】:

    标签: moq method-chaining


    【解决方案1】:

    有点;还有 Moq v4 功能规范。

    var foo = Mock.Of<IFoo>(f =>
        f.Id == 1 &&
        f.Who == "me" &&
        f.GetBar(It.IsAny<string>()) == Mock.Of<IBar>(
            b => b.Name == "Fred"));
    

    文档可能会更好。我有一个short writeup on my blog。另见Old style imperative mocks vs moq functional specificationsthis Moq Discussions thread

    【讨论】:

    • 不错。语法看起来不是很直观,但绝对是一种改进。我在快速入门中没有看到这一点。您如何为此设置 CallBase 和 DefaultValue?
    • 我相信你必须使用Mock.Get(foo).CallBase(); 或使用旧语法。有关更多信息,请参见上面的讨论主题链接。是的,目前这不在快速入门中。
    猜你喜欢
    • 2018-09-15
    • 1970-01-01
    • 1970-01-01
    • 2016-01-26
    • 1970-01-01
    • 2023-03-24
    • 1970-01-01
    • 2011-10-26
    • 1970-01-01
    相关资源
    最近更新 更多