如何使用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?
答案 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>();