Проверка создания новых элементов



Ваша база данных включает отношения «один ко многим» между таблицами «Студент» и «Зачисление» и отношения «один ко многим» между таблицами «Курс» и «Зачисление». Представления для регистрации правильно обрабатывают эти отношения. Перейдите на главную страницу своего сайта и выберите ссылку « Список ссылок», а затем ссылку « Создать новое» . В представлении отображается форма для создания новой записи регистрации. В частности, обратите внимание, что форма содержит два раскрывающихся списка, которые заполняются значениями из связанных таблиц.

Кроме того, валидация предоставленных значений автоматически применяется на основе типа данных поля. При попытке предоставить несовместимое значение отображается сообщение об ошибке.

 


Практическая работа №13

Тестирование приложения с помощью Unit - test

Цель работы: освоение технологии тестирования готового приложения

Задание:         разработать unit-test для созданного приложения

Далее разобран пример unit-теста. Необходимо по примеру сделать свой осмысленный тест для тестирования одного контроллера по выбору.

добавим в главный проект веб-приложения в папку Contollers новый контроллер StoreController:

1 2 3 4 5 6 7 8 public class StoreController : Controller { public ActionResult Index() { ViewBag.Message = "Hello world!"; return View(); } }

Контроллер имеет только один метод, который устанавливает свойство ViewBag.Message и генерирует объект ActionResult. А также добавим для метода Index представление.

Теперь перейдем к проекту тестов и добавим в него новый класс тестов. Для этого мы можем добавить либо стандартный класс, либо использовать специальный шаблон файлов. Для этого в проекте тестов нажмем правой кнопкой мыши на каталог Controllers и в появившемся контекстном меню выберем Add->Unit Test...:

 

По умолчанию добавляет класс UnitTest1. Во-первых, изменим название класса и файла на StoreControllerTest. Затем изменим следующим образом сам класс:

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 using System; using Microsoft.VisualStudio.TestTools.UnitTesting; using UnitTestApp.Controllers; using System.Web.Mvc;   namespace UnitTestApp.Tests.Controllers { [TestClass] public class StoreControllerTest { [TestMethod] public void IndexViewResultNotNull() { StoreController controller = new StoreController();   ViewResult result = controller.Index() as ViewResult;   Assert.IsNotNull(result); }   [TestMethod] public void IndexViewEqualIndexCshtml() { StoreController controller = new StoreController();   ViewResult result = controller.Index() as ViewResult;   Assert.AreEqual("Index", result.ViewName); }   [TestMethod] public void IndexStringInViewbag() { StoreController controller = new StoreController();   ViewResult result = controller.Index() as ViewResult;   Assert.AreEqual("Hello world!", result.ViewBag.Message); } } }

Метод IndexViewResultNotNull тестирует результат метода - возвращаемый объект ViewResult не должен иметь значение null. Метод IndexViewEqualIndexCshtml проверяет название вызываемого представления с помощью вызова Assert.AreEqual. А метод IndexStringInViewbag проверяет значение строки в свойстве ViewBag.Message.

Хотя у нас только один метод в контроллере, для него мы создали три тестовых метода для теста каждого отдельного тестового действия. Подобная изоляция облегчает тестирования отдельных участков кода.

Перед запуском тестов перестроим главный проект. И запустим тесты. В этом случае мы увидим, что один тест не пройден - тот, который верифицирует представление:

 

Тест не пройден, потому что при вызове метода View нам надо явным образом указывать представление. Поэтому изменим метод Index в главном проекте следующим образом:

1 2 3 4 5 public ActionResult Index() { ViewBag.Message = "Hello world!"; return View("Index"); }

Снова запустим тесты. И теперь уже все тесты должны быть успешно пройдены.

Все три действия имеют одну и ту же секцию Arrange, и, возможно, было бы неплохо сразу установить все начальные настройки для всех методов. Для этого изменим в тестовом проекте класс StoreControllerTest следующим образом:

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 [TestClass] public class StoreControllerTest { private StoreController controller; private ViewResult result;   [TestInitialize] public void SetupContext() { controller = new StoreController(); result = controller.Index() as ViewResult; }   [TestMethod] public void IndexViewResultNotNull() { Assert.IsNotNull(result); }   [TestMethod] public void IndexViewEqualIndexCshtml() { Assert.AreEqual("Index", result.ViewName); }   [TestMethod] public void IndexStringInViewbag() { Assert.AreEqual("Hello world!", result.ViewBag.Message); } }

Атрибут TestInitialize позволяет задать метод, который выполняет начальную инициализацию для каждого отдельного теста. Благодаря этому код сокращен, а в тестовых методах оставлены только части Assert. Однако подобный подход надо принимать с осторожностью, так как он осложняет возможности по изменению кода. В данном случае общий контекст очень прост, но если при изменении методов будет изменяться и их контекст, то придется вносить большие изменения во всех классах тестов, а не только в отдельный метод для тестов.


Дата добавления: 2022-01-22; просмотров: 98; Мы поможем в написании вашей работы!

Поделиться с друзьями:






Мы поможем в написании ваших работ!