如何使用StructureMap 2.5.3附带的MoqAutoMocker?

Jam*_*nes 5 structuremap unit-testing moq

我正在尝试使用StructureMap附带的MoqAutoMocker类,但我找不到任何应该如何使用它的示例.我必须继续使用的是使用RhinoMocks的StructureMap站点示例.

我要做的是使用Get方法引用我的一个自动模拟/注入依赖项.根据上面的链接,我应该可以做这样的事情

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

注意如何使用AssertWasCalled,这表明Get函数返回对RhinoMocks Mock对象的引用?当我使用MoqAutoMocker时,同样的代码对我不起作用.

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

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

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

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

小智 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);
Run Code Online (Sandbox Code Playgroud)

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