0

我正在尝试测试我的控制器,但它们每个都依赖于依赖于存储库的服务。我有以下代码...

Mock.Get(controller.Get<ServiceInterface>())
            .Setup(s => s.GetData())
            .Returns(FakeData.Create<Entity>(25));

我不断收到与 ServiceInterface 具体类相关的错误,该类没有其存储库的默认实例(注入)。我试图避免创建 FakeService,但看起来这就是我必须要做的。任何人都可以提供一些建议吗?

4

2 回答 2

1

我对这个问题的回答展示了如何对服务进行编程以实现接口,将该接口用作依赖项,然后模拟该服务以帮助您进行单元测试。

编辑

由于没有任何使用 MoqAutoMocker 的经验,我的建议有些有限。但我会首先尝试直接使用 Moq,看看这是否会给您带来任何麻烦。

var serviceMock = new Mock<IService>();
serviceMock.Setup(r => r.GetData())
    .Returns(FakeData.Create<Entity>(25));
var controller = new MyController(serviceMock.Object);

一旦你确定这可行,你就可以引入它的自动模拟方面:

var autoMocker = new MoqAutoMocker<MyController>();
Mock.Get(autoMocker.Get<IService>()).Setup(r => r.GetData())
    .Returns(FakeData.Create<Entity>(25));
MyController controller = autoMocker.ClassUnderTest;
于 2010-12-20T19:50:27.117 回答
0

您要测试哪些课程以及您要排除哪些课程?我猜您正在尝试测试您的控制器,并希望删除您的服务。如果是这种情况,您的服务的具体实现以及它的依赖项根本不应该参与您的测试并且应该是无关紧要的。您应该只需要删除测试控制器所需的服务接口的行为。

我只是在猜测您的意图,所以如果我的回答没有意义,您可能需要发布更多代码来显示您要测试的内容。

于 2010-12-20T19:35:52.933 回答