AutoMocker问题

时间:2010-12-19 19:53:01

标签: asp.net asp.net-mvc-2 moq structuremap automocking

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

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

我一直收到与ServiceInterface具体类相关的错误,该类没有为其存储库(注入)的默认实例。我试图避免创建一个FakeService,但它看起来就像我将要做的那样。有人可以提供一些建议吗?

2 个答案:

答案 0 :(得分:1)

My response to this question显示了如何对服务进行编程以实现接口,将该接口用作依赖关系,然后模拟服务以帮助您进行单元测试。

修改

没有使用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;

答案 1 :(得分:0)

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

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