我正在尝试使用StructureMap附带的MoqAutoMocker类,但我找不到任何应该如何使用它的示例。我所要做的只是example at the StructureMap site that uses RhinoMocks。
我要做的是使用Get方法引用我的一个自动模拟/注入依赖项。根据上面的链接,我应该可以做这样的事情
// This retrieves the mock object for IMockedService
autoMocker.Get<IMockedService>().AssertWasCalled(s => s.Go());
注意如何使用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);
但问题是我永远无法访问Setup方法。在这种情况下,对autoMocker.Get的调用似乎返回了一个ISecurityService实例,而不是Mock&lt; ISecurityService&gt;
有没有人以这种方式成功使用过MoqAutoMocker?我只是做错了吗?
答案 0 :(得分: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);
我还在我的博客上发布了一个冗长的例子:Setting Expectations With StructureMap’s MoqAutoMocker。
答案 1 :(得分:1)
TabItem
将返回ISecurityService,您无法在其上进行设置。相对的
autoMocker.Get<ISecurityService>()
将返回Moq.Mock,然后你可以安装它。