Как проверить HTTP-сообщение с Moq в ASP.NET? - PullRequest
5 голосов
/ 05 апреля 2009

У меня есть следующее Action Method Я пытаюсь moq проверить. Обратите внимание на AcceptVerbs? Мне нужно убедиться, что я проверяю это.

вот метод.

[AcceptVerbs(HttpVerbs.Post)]
public ActionResult Create([Bind(Include = "Subject, Content")]Post post,
    HttpPostedFileBase imageFileName)
{
  ...
}

вот код moq, который у меня есть ...

[TestMethod]
public void Create_Action_snip_sniop_When_Http_Post_Is_Succesful()
{
    // Arrange.
    var mock = new Mock<ControllerContext>();
    mock.SetupGet(m => m.HttpContext.Request.HttpMethod).Returns("POST");

    // Snip some other arrangements.

    var controller = PostController;
    controller.ControllerContext = mock.Object;

    // Act.
    var viewResult = controller.Create(post, image.Object) as ViewResult;

    // Assert.
    Assert.IsNotNull(viewResult);

    // TODO: Test that the request was an Http-Post.

что мне нужно сделать, чтобы убедиться, что запрос был опубликован?

1 Ответ

9 голосов
/ 05 апреля 2009

Ваш атрибут не будет вызываться при запуске в качестве модульного теста, поскольку он обычно вызывается ControllerActionInvoker как часть "стека" Mvc. В подобных случаях я написал тест, чтобы убедиться, что к действию применен правильный атрибут с правильными параметрами. Тогда я верю, что фреймворк будет работать правильно.

Для этого требуется рефлексия:

 public void Only_posts_are_allowed_to_my_action()
 {
       var method = typeof(MyController).GetMethod("MyAction");
       var attribute = method.GetCustomAttributes(typeof(AcceptVerbsAttribute),false)
                             .Cast<AcceptVerbsAttribute>()
                             .SingleOrDefault();

       Assert.IsNotNull( attribute );
       Assert.AreEqual( 1, attributes.Count() );
       Assert.IsTrue( attributes.Contains( HttpVerbs.Post ) );
 }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...