Модульное тестирование, если методы находят и возвращают представление в ASP.NET - PullRequest
0 голосов
/ 22 мая 2018

Я новичок в ASP.NET и реорганизую некоторые функциональные возможности моего ASP.NET-приложения с MVC-структурой в области.Это уже привело к тому, что методы контроллера не могут больше находить свои представления, что приводит к следующей странице:

enter image description here

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

Я придумал следующее:

[TestMethod]
public void AboutTest()
{
    var controller = new HomeController();
    var result = controller.About() as ViewResult;
    Assert.IsNotNull(result);
}

, который проверяет метод About в следующем коде:

public class HomeController : Controller
{
    public ActionResult About()
    {
        return View();
    }

    public ActionResult Contact()
    {
        return View("~/Views/SomeFolder/Contact.cshtml");
    }
}

Но даже когда метод HomeControllers About не может найти представление, это утверждение успешно выполняется, поэтому это не работает для меня.

Я нашел решениеонлайн , чтобы использовать использование ViewEngine.FindView () здесь.Я не думаю, что смогу использовать это, так как в некоторых контроллерах на ссылки ссылается жестко закодированная строка (см. Метод контакта в примере контроллера выше) вместо простого возврата представления по умолчанию (симметрично названного как его метод).ViewEngine.FindView (controller.ControllerContext, "about", "about");затем произойдет сбой, но метод контроллера не будет.

Другое решение утверждает использование Assert.IsEqual () и проверяет, равен ли result.ViewName жестко закодированной строке (например,: "Около").Так как я не задаю или не знаю название представлений, которые я ожидаю получить, это также не будет решением.

(Как) я смогу протестировать свое приложение для этого?

1 Ответ

0 голосов
/ 22 мая 2018

Вы не должны проверять NULL, он будет возвращать ViewResult, даже если он не рендерится.

Чтобы проверить, действительно ли он выполняет рендеринг, используйте AssertViewRendered из mvccontrib .

[TestMethod]
public void AboutTest()
{
    var controller = new HomeController();
    var result = controller.About().AssertViewRendered();
}

Вы даже можете проверить наличие определенного вида, например, так:

result.AssertViewRendered().ForView(MVC.Your.Views.AboutView);

Или предоставить данные примерно так:

controller.page().AssertViewRendered().ForView("page").WithViewData<SomeModel>();

Для интерактивного учебника с большим количествомфотографии, которые я могу порекомендовать: http://toreaurstad.blogspot.nl/2011/09/adventures-with-mvccontrib-testhelper.html

Редактировать:

Вы также можете проверить Selenium , чтобы протестировать все приложение (включая рендеринг200 маршрутов).

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