这是我的类实现,其中泛型实现了两个接口......
public class ClassA<TGeneric> : where TGeneric: IInterfaceA, IInterfaceB
我想模拟ClassA。但是,我不能使用
var mock = new Mock<Class<A<IInterfaceA>>();
或
var mock = new Mock<Class<A<IInterfaceB>>();
因为泛型需要两个接口的实现。我知道你可以使用moq上的As()方法来模拟具有多个接口的对象,但我这里没有一个对象,只有泛型类型。
思想?
...谢谢
答案 0 :(得分:8)
您可以定义一个包含接口A和B的接口(在测试项目中,出于测试目的),然后在模拟中使用它。
public interface ICanTestAAndB : IInterfaceA, IInterfaceB {}
var mock = new Mock<ClassA<ICanTestAAndB>>();
答案 1 :(得分:0)
作为可接受答案的替代方法,您可以通过将模拟对象转换为dynamic
来实现所需的功能,并且在运行时它将按预期工作。
void Main()
{
var mockA = new Mock<IIntA>();
mockA.Setup(a => a.DoA()).Returns(3);
var mockB = mockA.As<IIntB>();
mockB.Setup(iib => iib.DoB()).Returns(7);
dynamic d = mockB.Object;
TakeBoth(d);
}
void TakeBoth<T>(T obj) where T : IIntA, IIntB
{
}
public interface IIntA { int DoA(); }
public interface IIntB { int DoB(); }