【问题标题】:FakeItEasy: Fake a call to a generic method without specifying the typeFakeItEasy:在不指定类型的情况下伪造对泛型方法的调用
【发布时间】:2016-05-10 21:18:28
【问题描述】:

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

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,但我无法构造要返回的正确类型的对象。

如何模拟这个调用?

【问题讨论】:

  • 为什么不添加InternalsVisibleTo属性?
  • 理想情况下我宁愿不这样做,但由于我确实可以控制定义 InternalType 的库,所以这是我采用的解决方案。如果您将其转化为答案,我很乐意将其标记为正确答案。

标签: c# generics fakeiteasy


【解决方案1】:

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

【讨论】:

    猜你喜欢
    • 2014-05-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-10-15
    • 1970-01-01
    • 2013-02-03
    • 1970-01-01
    相关资源
    最近更新 更多