我有一个依赖于通过泛型方法执行查询的外部组件的类型。以下是正在发挥作用的简化版本:
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,但是我无法构造要返回的正确类型的对象。
我该如何模拟这个电话?
答案 0 :(得分:1)
这听起来像InternalsVisibleTo
属性的完美使用。只需使用内部类型将一个实例添加到程序集中,并将测试程序集作为值。