使AutoMoq返回Fixture创建的方法值

时间:2016-02-08 12:02:21

标签: moq autofixture automoq

我想通过设置AutoMoq创建的所有Moq模拟默认情况下将Fixture创建的值作为方法返回值返回来节省时间。

在进行如下测试时,这将是有益的:

    <dependency>
        <groupId>io.dropwizard.metrics</groupId>
        <artifactId>metrics-core</artifactId>
        <version>${metrics.version}</version>
    </dependency>
    <dependency>
        <groupId>io.dropwizard</groupId>
        <artifactId>dropwizard-metrics-graphite</artifactId>
        <version>${dw.version}</version>
    </dependency>
    <dependency>
        <groupId>io.dropwizard.metrics</groupId>
        <artifactId>metrics-graphite</artifactId>
        <version>${metrics.version}</version>
    </dependency>

请注意,生成的值必须缓存在(?)代理内部,我们需要相同的值&#34;冻结&#34;为了检查。此外,使用[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))))); } 设置模拟应该覆盖创建的值。

那么,我们如何修改AutoMoq模拟呢?

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

Setup

1 个答案:

答案 0 :(得分:4)

绝对可以,只需使用AutoConfiguredMoqCustomization代替AutoMoqCustomization。模拟将使用fixture为其所有方法,属性和索引器(*)生成返回值。

将热切地评估属性,而索引器/方法&#39;第一次调用时,将评估和缓存返回值。

(*)此规则有两个例外 - 自定义无法使用ref参数自动设置通用方法或方法,如here所述。您必须借助.ReturnsUsingFixture方法手动设置这些内容。