使自动起订量返回方法的夹具创建值



我想探索一下我们是否可以通过设置AutoMoq创建的所有Moq模拟默认情况下应返回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();
}

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

将急切地评估属性,而索引器/方法的返回值将在首次调用时进行评估和缓存。

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

最新更新