Модульное тестирование ASP. NET MVC Свойства ViewBag, установленные в представлении - PullRequest
1 голос
/ 13 апреля 2020

У меня есть различные ViewBags, которые мне нужно проверить, установлены правильно. Я начинаю с тестирования простого ViewBag.Title, затем перейду к другим ViewBag, которые фактически передают данные Dynami c.

Я пытаюсь протестировать этот ViewBag.Title в Create.cs html

@{
    ViewBag.Title = "Create";
}

Контроллер бронирования для этого просмотра:

    // GET: Booking/Create
    public ActionResult Create()
    {
        return View();
    }

Я пробовал следующее:

    [TestMethod]
    public void BookingTest()
    {
        var controller = new BookingController();
        var ar = controller.Create() as ViewResult;
        Assert.AreEqual("Create", ar.ViewData["Title"]);
    }

Также пробовал:

    [TestMethod]
    public void BookingTest()
    {
        var controller = new BookingController();
        //var ar = controller.Create() as ViewResult;
        Assert.AreEqual("Create", controller.ViewBag.Title);
    }

Оба модульных теста не пройдены и возвращают следующее: Message: Assert.AreEqual failed. Expected:<Create>. Actual:<(null)>.

Кто-нибудь может увидеть, что я делаю неправильно?

1 Ответ

1 голос
/ 13 апреля 2020

На основании

@{
    ViewBag.Title = "Create";
}

может показаться, что вы устанавливаете ViewBag в фактическом представлении (ie cs html).

На основании того, как Controller и View разделены, модульный тест не будет иметь доступа к визуализированному представлению. ActionResult (ViewResult в этом случае) будет выполняться платформой во время выполнения для передачи необходимых данных в представление.

Чтобы получить ожидаемое поведение, вам пришлось бы назначить это Title от контроллера

Действие контроллера:

public ActionResult Create() {
    ViewBag.Title = "Create";
    return View();
}

, чтобы ваши тесты работали так, как ожидалось.

[TestMethod]
public void BookingTest() {
    //Arrange
    var controller = new BookingController();
    string expected = "Create";

    //Act
    var result = controller.Create() as ViewResult;
    var actual = (string) result.ViewData["Title"];

    //Assert
    Assert.AreEqual(expected, actual);
}
...