最佳答案
我想做的是为 I1构造一个 moq-这很好... 然而在我正在测试的使用这个 mock 的方法过程中,我需要将它强制转换为 I2,以访问一些不在 I1上的属性
Interface I1
{ int AProperty{get;set;}}
Interface I2
{int AnotherProperty{get;set;}}
然后我就有了一些东西
Class O1 : I1 {}
还有
Class O2 : O1 , I2 {}
问题是,当我有一个 I2实现对象的实例时,我可以将它强制转换为 I1,以便访问通过该接口实现的方法。在代码中,这不是问题,一切都按预期运行。
在这个类上编写单元测试时,唯一的问题出现了。
接口还公开了一个名为 GetNewInstance 的方法,该方法返回实现对象的一个初始化实例,该实例被强制转换到 IGetNewInstance 接口中... ... 我通常可以模拟这个实例,让它自己返回(所以我继续使用模拟对象)。
但是,当您尝试将这个类型为 I2的返回对象强制转换为 I1时,会得到一个空引用结果——这是有意义的,因为实现 I2的模拟对象不会从继承 I1的任何对象继承。
问题是我如何强制模拟对象同时从 I1和 I2继承?