вызов метода действия Asp.net MVC 3, который обновляет базу данных в методе модульного тестирования - PullRequest
0 голосов
/ 22 апреля 2011

Кодеры, я нахожусь в процессе написания тестовых примеров для проекта Asp.net MVC 3, и мне нужно вызвать метод действия, который вставляет данные в базу данных, используя Entity Framework. Вот код для метода действия:

//
    // POST: /School/Create

    [HttpPost]
    public ActionResult Create(School school)
    {
        if (ModelState.IsValid)
        {
            db.Schools.Add(school);
            db.SaveChanges();
            return RedirectToAction("Index");  
        }

        return View(school);
    }

А вот код для моего метода испытаний:

 [TestMethod]
    public void CreateNewSchool()
    {
        var schoolController = new SchoolController();
        var viewResult = schoolController.Index();

        //creating a school object
        School school = new School();
        school.Name = "OOO";

        //passing the school object to the action method
        schoolController.Create(school);

        //making sure that the model is not null
        Assert.IsNotNull(viewResult.Model);
    }

Однако обратите внимание, что я не проверяю, были ли данные фактически вставлены в базу данных. Я просто проверяю, что модель представления не является нулевой. Я проверяю базу данных вручную, используя SQL Server Management Studio.

Проблема в том, что когда я вызываю метод действия в тестовом методе для создания / вставки записи в базу данных, с базой данных ничего не происходит. Однако, если я запускаю приложение и просматриваю страницу создания и пытаюсь создать новую запись, запись будет добавлена ​​в базу данных. Поэтому мне кажется, что вставка в базу данных происходит только в том случае, если я запускаю приложение и на самом деле просматриваю страницу создания и нажимаю кнопку «Создать», но я не могу программно вызвать метод действия в методе test для вставки новой записи в базу данных. Я также отладил контрольный пример, и он попал в db.SaveChanges (); строка в методе действия, но в базе данных не было отражено никаких изменений.

Итак, кто-то может объяснить мне, почему я не могу вставить запись, вызвав метод действия в моем методе тестирования?

Заранее спасибо.

Ответы [ 2 ]

2 голосов
/ 22 апреля 2011

Я бы посмотрел, как создается ваш db контекст.Во многих случаях нежелательно, чтобы модульные тесты вызывали обходы базы данных, поэтому люди используют такие стратегии, как издевательство, чтобы предотвратить это.Это может быть что-то столь же простое, как использование другой строки подключения при запуске модульного теста, а не как приложения asp.net.

0 голосов
/ 22 апреля 2011

Есть ли у вас подтверждение в школьном классе? Я предполагаю, что при запуске в тестовой среде школа недопустима, поэтому ModelState.IsValid возвращает false и не сохраняет.

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