Вы проверяете HttpVerbs в своих модульных тестах? - PullRequest
1 голос
/ 25 июня 2009

Рассматривая модульные тесты, которые идут со стандартным шаблоном веб-проекта ASP.MVC, я заметил, что они не проверяют, установлен ли правильный атрибут HttpVerbs для каждого метода действия.

Очень легко проверить это с помощью рефлексии, но вопрос в том, стоит ли это того, стоит ли это усилий. Вы проверяете HttpVerbs в своем модульном тесте или оставляете это на интеграционное тестирование?

Ответы [ 4 ]

2 голосов
/ 07 февраля 2011

Вы также можете использовать MvcContrib.TestHelper для проверки маршрута с действиями.

    [TestMethod]
    public void ShouldConfirmRouteForNewObjectWithPost()
    {
        "~/Object/New".WithMethod(HttpVerbs.Post).ShouldMapTo<ObjectController>(x => x.New());
    }
1 голос
/ 16 августа 2009

В случае, если кто-то еще найдет этот вопрос: я начал проверять все мои методы действия на прием атрибутов в моих модульных тестах Немного размышлений делает трюк просто отлично. Вот некоторый код, если вы хотите это сделать:

protected void CheckAcceptVerbs<TControllerType>(string methodName, HttpVerbs verbs)
{              
    CheckAcceptVerbs(methodName, typeof(TControllerType).GetMethod(methodName, BindingFlags.Public|BindingFlags.Instance,null,new Type[]{},null), verbs);
}

protected void CheckAcceptVerbs<TControllerType>(string methodName, Type[] ActionMethodParameterTypes, HttpVerbs verbs)
{
    CheckAcceptVerbs(methodName, typeof(TControllerType).GetMethod(methodName, BindingFlags.Public | BindingFlags.Instance, null, ActionMethodParameterTypes, null), verbs);
}

private void CheckAcceptVerbs<TControllerType>(string methodName, MethodInfo actionMethod, HttpVerbs verbs)
{
    Assert.IsNotNull(actionMethod, "Could not find action method " + methodName);
    var attribute =
        (AcceptVerbsAttribute)
        actionMethod.GetCustomAttributes(false).FirstOrDefault(
            c => c.GetType() == typeof(AcceptVerbsAttribute));


    if (attribute == null)
    {
        Assert.AreEqual(HttpVerbs.Get, verbs);
        return;
    }

    Assert.IsTrue(HttpVerbsEnumToArray(verbs).IsEqualTo(attribute.Verbs));
}

Первый метод предназначен для методов действия без параметров, второй - для методов с параметрами. Вы также можете просто напрямую использовать третий метод, но я написал первые две перегрузки как вспомогательные функции.

0 голосов
/ 14 августа 2009

Не знаю, но это только потому, что это не приходило мне в голову, пока вы не упомянули об этом. Я буду с этого момента.

0 голосов
/ 26 июня 2009

Что касается меня, я всегда проверяю правильный AcceptVerbsAttribute для каждого действия в моих контроллерах.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...