FakeItEasy:在不指定类型的情况下伪造对泛型方法的调用

FakeItEasy: Fake a call to a generic method without specifying the type

我有一个类型依赖于通过通用方法执行查询的外部组件。这是正在播放的内容的简化版本:

public class UnitUnderTest
{
    private IQueryEngine _engine;

    public UnitUnderTest(IQueryEngine engine)
    {
        _engine = engine;
    }

    public OutputType DoSomething() 
    {
         _engine.Query<ExternalType>(...);
         _engine.Query<InternalType>(...);
    }
}

public interface IQueryEngine
{
    IEnumerable<T> Query<T>(string conditions);
}

我正在尝试测试的 DoSomething 方法调用 IQueryEngine 两次。

它第一次使用我可以从测试中访问的类型调用它,所以我使用 A.CallTo 来模拟它没有问题。

但随后它使用我无法访问的类型参数(它是 internal 类型)第二次调用。

现在我的测试失败了,因为 DoSomething 不希望从对 _engine.Query 的调用返回 null,但我无法为 return 构造正确的对象类型。

如何模拟这个调用?

这听起来像是对 InternalsVisibleTo 属性的完美使用。只需将内部类型的实例添加到您的程序集,并将您的测试程序集作为值。