模拟一个返回NInject Mocking Kernel

时间:2016-09-03 17:42:06

标签: c# unit-testing moq ninject-mockingkernel

说我有这样的界面。

public interface ICamProcRepository
{
    List<IAitoeRedCell> GetAllAitoeRedCells();
    IAitoeRedCell CreateAitoeRedCell();
}

如何模拟返回接口的方法和接口对象列表。我正在使用Ninject.MockingKernel.Moq

var mockingKernel = new MoqMockingKernel();

var camProcRepositoryMock = mockingKernel.GetMock<ICamProcRepository>();

camProcRepositoryMock.Setup(e => e.GetAllAitoeRedCells()).Returns(?????WHAT HERE?????);

camProcRepositoryMock.Setup(e => e.CreateAitoeRedCell()).Returns(?????WHAT HERE?????);

1 个答案:

答案 0 :(得分:2)

在您的情况下,您需要为有问题的模拟接口创建所需结果的模拟,并通过内核或直接moq将它们传递到其设置的Returns。我不知道Ninject能够帮助你,但这里有一个简单的Moq例子

var mockingKernel = new MoqMockingKernel();

var camProcRepositoryMock = mockingKernel.GetMock<ICamProcRepository>();

var fakeList = new List<IAitoeRedCell>();
//You can either leave the list empty or populate it with mocks.
//for(int i = 0; i < 5; i++) {
//    fakeList.Add(Mock.Of<IAitoeRedCell>());
//}

camProcRepositoryMock.Setup(e => e.GetAllAitoeRedCells()).Returns(fakeList);

camProcRepositoryMock.Setup(e => e.CreateAitoeRedCell()).Returns(() => Mock.Of<IAitoeRedCell>());

如果模拟对象也需要提供虚假功能,那么也必须相应地设置。