Autofixture 使用具有泛型签名的自动moq方法

Autofixture 使用具有泛型签名的自动moq方法,autofixture,automoq,Autofixture,Automoq,我目前正在使用一个测试框架,这个框架是我使用xUnit、AutoMoq、AutoFixture和AutoFixture.XUnit2创建的。我遇到了使用泛型签名的模拟方法的问题 AutoFixture似乎可以处理一般项目。如果我请求一个CustomeObject,或者其他一些荒谬的嵌套泛型类型,它似乎会按照预期生成它们,一直到最后一个节点 但是,如果我有这样一个界面: public interface ITestInterface{ T Get<T>(); } 公共接口IT

我目前正在使用一个测试框架,这个框架是我使用xUnit、AutoMoq、AutoFixture和AutoFixture.XUnit2创建的。我遇到了使用泛型签名的模拟方法的问题

AutoFixture似乎可以处理一般项目。如果我请求一个
CustomeObject
,或者其他一些荒谬的嵌套泛型类型,它似乎会按照预期生成它们,一直到最后一个节点

但是,如果我有这样一个界面:

public interface ITestInterface{
    T Get<T>();
}
公共接口ITestInterface{
T Get();
}
然后尝试从AutoMoq得到的mock调用该方法,它只返回null。例如:

[Theory]
[MyAutoDaqaAttribute]
public async Task ATest(
    Mock<ITestInterface> service
) {
    var result = service.Object.Get<string>();
}
[理论]
[MyAutoDaqaAttribute]
公共异步任务ATest(
模拟服务
) {
var result=service.Object.Get();
}
在此代码中,结果将为空。我觉得这很奇怪。它不应该转到autofixture并尝试创建类型为t的值,即新字符串吗?似乎Autofixture已经表明它可以很好地处理泛型


或者您总是需要手动设置任何签名中包含泛型的模拟方法吗?

默认情况下,模拟对象不会通过AutoFixture。不过,您可以使用
自动配置的MoqCustomization

但是,在您的例子中,该方法是泛型的。
AutoConfiguredMoqCustomization
不适用于泛型方法,您必须手动设置该方法

摘自:

AutoConfiguredMoqCustomization
也不配置泛型方法。但是,您可以使用
ReturnsUsingFixture
扩展方法轻松设置:

converter.Setup(x => x.Convert<double>("10.0"))
         .ReturnsUsingFixture(fixture);
converter.Setup(x=>x.Convert(“10.0”))
.使用夹具(夹具)返回;

对,我应该注意到我使用AutoConfigureMoqCustomizations的方式。但是感谢您确认AutoConfiguredMoqCustomizations无法配置泛型方法。因此,看起来我无法避免进行某种程度的设置,但至少可以避免使用ReturnsUsingFixture设置返回值。我试试看。谢谢