Как создать заглушку с Moq - PullRequest
14 голосов
/ 23 ноября 2011

Как создать чистую заглушку с помощью 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);
    }
}

Как бы я создал заглушку для MockRepository.GenerateStub<HttpContextBase>();, используя Moq?Или мне просто остаться с Rhino Mocks?

Ответы [ 3 ]

13 голосов
/ 23 ноября 2011

Вот мое предложение для вас:

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

Тогда вам нужно выполнить настройку.

Для получения дополнительной информации см. домашнюю страницу проекта MOQ.

6 голосов
/ 01 мая 2018

Немного опоздал на вечеринку здесь, но, на мой взгляд, здесь все еще нет достаточного ответа.

В Moq нет явной генерации заглушек и макетов, как в RhinoMocks.Вместо этого все вызовы установки, например mockObject.Setup(x => blah ...), создают заглушку.

Однако, если вы хотите, чтобы тот же код обрабатывался как фиктивный, вам нужно вызвать mockObject.Verify(x => blah ...), чтобы подтвердить, что установка прошла так, как вы ожидали.

Если вы позвоните mockObject.VerifyAll(), он будет воспринимать все, что вы настроили, как ложные, и это вряд ли будет желаемым вами поведением, т.е. все заглушки будут рассматриваться как ложные.

Вместо этого, когданастройка макета используйте метод mockObject.Setup(x => blah ...).Verifiable(), чтобы явно пометить установку как макет.Затем вызовите mockObject.Verify() - тогда будут утверждены только настройки, помеченные Verifiable().

0 голосов
/ 23 ноября 2011
var mockHttpContext = new Mock<HttpContextBase>();
...