Единичное тестирование, если методы находят и возвращают представление в ASP.NET

Kevin спросил: 28 апреля 2018 в 09:43 в: asp.net

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

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

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

[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 ответ

Rick van Lieshout ответил: 28 апреля 2018 в 11:29

Вы не должны проверять значение 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 маршрутов).