FakeItEasy:假定调用泛型方法而不指定类型

时间:2016-05-06 15:21:22

标签: c# generics fakeiteasy

我有一个依赖于通过泛型方法执行查询的外部组件的类型。以下是正在发挥作用的简化版本:

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);
}

{I}尝试两次调用DoSomething的{​​{1}}方法。

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

然后它第二次使用我无法访问的类型参数调用(它是A.CallTo类型)。

现在我的测试是轰炸,因为internal不期望从调用DoSomething返回null,但是我无法构造要返回的正确类型的对象。

我该如何模拟这个电话?

1 个答案:

答案 0 :(得分:1)

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