5

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

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() 方法来模拟具有多个接口的对象,但我这里并没有真正的对象,而是泛型类型。

想法?

谢谢...

4

2 回答 2

10

You could define an interface that includes both interface A and B (in your test project, for testing purposes), then use that in your mock.

public interface ICanTestAAndB : IInterfaceA, IInterfaceB {}

var mock = new Mock<ClassA<ICanTestAAndB>>();
于 2013-04-22T17:52:21.797 回答
1

作为接受的答案的替代方案,您可以通过将模拟对象强制转换为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(); }
于 2020-05-28T10:00:35.930 回答