5

我正在尝试使用 StructureMap 附带的 MoqAutoMocker 类,但我找不到任何应该如何使用它的示例。我所要做的就是在 StructureMap 站点上使用 RhinoMocks 的示例

我想要做的是使用 Get 方法获取对我的自动模拟/注入依赖项之一的引用。根据上面的链接,我应该能够做这样的事情

    // This retrieves the mock object for IMockedService
    autoMocker.Get<IMockedService>().AssertWasCalled(s => s.Go());

请注意如何使用 AssertWasCalled,它指示 Get 函数返回对 RhinoMocks Mock 对象的引用?当我使用 MoqAutoMocker 时,同样的代码对我不起作用。

我有一个类 SignInController,它依赖于构造函数中的 ISecurityService。使用 MoqAutoMocker 就像示例中使用的 RhinoAutoMocker 一样,我想我应该能够做到这一点......

var autoMocker = new MoqAutoMocker<SignInController>();
autoMocker.Get<ISecurityService>().Setup(ss => ss.ValidateLogin
(It.IsAny<string>(), It.IsAny<string>())).Returns(true); 

但问题是我永远无法访问 Setup 方法。在这种情况下,对 autoMocker.Get 的调用似乎返回了 ISecurityService 的实例,而不是 Mock<ISecurityService>

有没有人以这种方式成功使用 MoqAutoMocker?我只是做错了吗?

4

2 回答 2

10

我最近遇到了一个类似的问题。似乎解决方案是做这样的事情:

var autoMocker = new MoqAutoMocker<SignInController>();
var mock = autoMocker.Get<ISecurityService>();
Mock.Get(mock).Setup(ss => ss.ValidateLogin
(It.IsAny<string>(), It.IsAny<string>())).Returns(true);

我还在我的博客上发布了一个更长的示例:使用 StructureMap 的 MoqAutoMocker 设置期望

于 2009-09-16T23:02:03.953 回答
1

autoMocker.Get<ISecurityService>()
将返回 ISecurityService 并且您无法对其进行设置。相反
Mock.Get(mock)
会返回 Moq.Mock,然后你就可以Setup 就可以了。

于 2015-10-28T07:55:33.990 回答