2010-12-19 18 views
0

我试图测试我的控制器,但它们中的每一个都对依赖于存储库的服务有依赖性。我有以下代码...AutoMocker问题

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

我不断收到有关serviceInterface等具体类不必为它的存储库的默认实例错误(注入)。我试图避免创建一个FakeService,但它看起来就是我所要做的。谁能提供一些建议?

回答

0

你想要测试哪些类以及你想要测试哪些类?我猜想你正在尝试测试你的控制器,并想要将你的服务存档。如果是这样的话,你的服务的具体实现以及它的依赖关系不应该参与你的测试,而应该是不相关的。您只需要将测试控制器所需的服务接口的行为截断即可。

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

+0

我控制器对我的服务注入依赖,和我的服务有一个依赖注入在存储库上。我试图嘲笑我的服务,所以我可以注入它,但我遇到的问题是当我试图嘲笑我的服务时,我得到一个与AutoMocker相关的错误,无法将模拟库注入到模拟服务中。希望这解释多一点。 – jsteve81 2010-12-21 05:14:36

+0

这真的没有道理。如果您的控制器依赖于服务接口,并且控制器不直接依赖存储库接口,那么当您模拟服务接口时,NOTHING应该依赖于存储库,在这种情况下,它不应该显示在您的测试中。您是否在测试设置中使用存储库接口?你的FakeData类是否使用它? – 2010-12-25 03:34:52

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; 
+0

感谢Stripling ...我的服务已经实现了一个接口。有关更多信息,请参阅第二个答案的评论。 – jsteve81 2010-12-21 05:15:49

+0

@jsteve:你的控制器是依赖于服务接口还是具体的类?如果你的构造函数指定它使用接口,AutoMock似乎不太可能知道具体类的依赖关系。 – StriplingWarrior 2010-12-21 18:16:59

+0

服务接口 – jsteve81 2010-12-22 15:46:29