【问题标题】:Making AutoMoq return Fixture-created values for methods使 AutoMoq 返回夹具创建的方法值
【发布时间】:2016-02-08 12:02:20
【问题描述】:

我想探索我们是否可以通过设置 AutoMoq 创建的所有 Moq-mocks 默认将 Fixture 创建的值作为方法返回值返回来节省时间。

这在进行如下测试时会很有用:

[TestMethod]
public void Client_Search_SendsRestRequest()
    var client = fixture.Create<Client>();

    // Could be removed by implementing the mentioned functionality
    Mock.Of(JsonGenerator).Setup(j => j.Search(It.IsAny<string>())).Returns(create("JsonBody")));

    client.Search(fixture.Create("query"));

    Mock.Of(client.RestClient).Verify(c => c.Execute(It.IsAny<RestRequest>()));
    Mock.Of(client.RestClient).Verify(c => c.Execute(It.Is<RestRequest>(r => record(r.Body) == record(client.JsonGenerator.Search(query)))));
}

请注意,生成的值必须缓存在 (?) 代理中,我们希望“冻结”相同的值以便检查。此外,使用 Setup 设置模拟应该覆盖创建的值。

那么,我们如何修改 AutoMoq 模拟来做到这一点?

验证它是否有效的简单测试可能是:

[TestMethod]
public void MockMethodsShouldReturnCreatedValues()
{
    Guid.Parse(new Fixture().Create<ITest>().Test());
}

public interface ITest
{
    string Test();
}

【问题讨论】:

    标签: moq autofixture automoq


    【解决方案1】:

    绝对有可能,只需使用AutoConfiguredMoqCustomization 而不是AutoMoqCustomization。模拟将使用夹具为其所有方法、属性和索引器 (*) 生成返回值。

    属性将被立即评估,而索引器/方法的返回值将在第一次调用时被评估和缓存。

    (*) 此规则有两个例外 - 自定义无法自动设置泛型方法或带有 ref 参数的方法,如 here 所述。您必须在 .ReturnsUsingFixture 方法的帮助下手动设置。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-09-09
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多