C# 模拟实现多个接口的泛型

C# 模拟实现多个接口的泛型,c#,mocking,moq,C#,Mocking,Moq,这是我的类实现,其中泛型实现了两个接口 public class ClassA<TGeneric> : where TGeneric: IInterfaceA, IInterfaceB 公共类ClassA:其中TGeneric:IInterfaceA,IInterfaceB 我想模仿ClassA。然而,我不能使用 var mock = new Mock<Class<A<IInterfaceA>>(); var mock=new mock您可以定义一

这是我的类实现,其中泛型实现了两个接口

public class ClassA<TGeneric> : where TGeneric: IInterfaceA, IInterfaceB
公共类ClassA:其中TGeneric:IInterfaceA,IInterfaceB
我想模仿ClassA。然而,我不能使用

var mock = new Mock<Class<A<IInterfaceA>>();

var mock=new mock您可以定义一个同时包含接口A和B的接口(出于测试目的,在您的测试项目中),然后在您的mock中使用它

public interface ICanTestAAndB : IInterfaceA, IInterfaceB {}

var mock = new Mock<ClassA<ICanTestAAndB>>();
公共接口ICANTESTANDB:IInterfaceA,IInterfaceB{}
var mock=new mock();

作为接受答案的替代方案,您可以通过将模拟对象强制转换为
动态
来实现所需的功能,并且在运行时它将按预期工作

void Main()
{
var mockA=新Mock();
Setup(a=>a.DoA()).Returns(3);
var mockB=mockA.As();
mockB.Setup(iib=>iib.DoB())。返回(7);
动态d=mockB.Object;
二者皆取(d);
}
void taketwo(T obj),其中T:inta,IIntB
{
}
公共接口IIntA{int DoA();}
公共接口IIntB{int DoB();}
public interface ICanTestAAndB : IInterfaceA, IInterfaceB {}

var mock = new Mock<ClassA<ICanTestAAndB>>();