如何使用Moq创建存根

时间:2011-11-23 12:06:30

标签: c# asp.net-mvc-3 nunit moq rhino-mocks

如何使用Moq创建纯存根?使用Rhino Mocks,我这样做了:

[TestFixture]
public class UrlHelperAssetExtensionsTests
{
     private HttpContextBase httpContextBaseStub;
     private RequestContext requestContext;
     private UrlHelper urlHelper;
     private string stylesheetPath = "/Assets/Stylesheets/{0}";

     [SetUp]
     public void SetUp()
     {
          httpContextBaseStub = MockRepository.GenerateStub<HttpContextBase>();
          requestContext = new RequestContext(httpContextBaseStub, new RouteData());
          urlHelper = new UrlHelper(requestContext);
     }

     [Test]
    public void PbeStylesheet_should_return_correct_path_of_stylesheet()
    {
        // Arrange
        string expected = stylesheetPath.FormatWith("stylesheet.css");

        // Act
        string actual = urlHelper.PbeStylesheet();

        // Assert
        Assert.AreEqual(expected, actual);
    }
}

如何使用Moq为MockRepository.GenerateStub<HttpContextBase>();创建存根?或者我应该留在Rhino Mocks?

3 个答案:

答案 0 :(得分:13)

以下是我的建议:

Mock<HttpContextBase> mock = new Mock<HttpContextBase>();
mock.SetupAllProperties();

然后你必须进行设置。

有关更多信息,请参阅homepage of the MOQ project.

答案 1 :(得分:5)

这里的派对有点晚了,但在我看来还没有足够的答案。

Moq没有明确的存根和模拟生成,就像RhinoMocks一样。相反,所有设置调用,例如mockObject.Setup(x => blah ...)创建一个存根。

但是,如果您希望将相同的代码视为模拟,则需要调用mockObject.Verify(x => blah ...)来断言设置按预期运行。

如果你打电话给mockObject.VerifyAll(),它会将你设置的所有内容视为嘲讽,这不太可能是你想要的行为,即所有存根被视为嘲笑。

相反,在设置模拟时,使用mockObject.Setup(x => blah ...).Verifiable()方法将设置明确标记为模拟。然后拨打mockObject.Verify() - 这只会声明已标有Verifiable()的设置。

答案 2 :(得分:1)

var mockHttpContext = new Mock<HttpContextBase>();