Я разработчик C# и пользовательского интерфейса и заинтересован в написании модульных тестов в VS CodedUI для веб-приложений ASP.NET. Большинство применений, которые я видел, представляют собой интеграционные тесты, в которых вы пишете тест, который указывает на реальную веб-страницу, выполняете некоторые шаги и проверяете результат. Я хочу что-то меньшее и более детализированное, что очень просто для разработчиков (читай: ленивых: P) писать.
Моя текущая установка выглядит так:
- Веб-приложение, содержащее страницы, элементы управления, javascript и т. д.
- Веб-приложение также содержит тестовые страницы — страницы, которые содержат один пользовательский элемент управления в разметке и некоторые жестко запрограммированные данные в коде программной части.
- Проект CodedUI, который запускает тестовую страницу, запускает тест и утверждает выходные данные.
Это хорошее начало, но я хочу его улучшить.
Проблема (первая...) заключается в том, что тестовые данные и этапы тестирования находятся в разных местах - в веб-приложении и проекте codedUI соответственно. В обычных модульных тестах для разработчиков вы пишете код, который устанавливает данные, затем делаете все остальное, и все, что вам нужно, находится в одном месте. С моей настройкой человек, наблюдающий за сбоем теста, должен знать, что нужно смотреть и на тест, и на тестируемую страницу.
Несколько идей, которые у меня были, и почему они отстойные:
- Поместите тестовую страницу в проект codedUI. Это проблема по нескольким причинам. Пользовательские элементы управления не могут быть легко протестированы, это было моей точкой остановки, но я считаю, что есть много других.
- Передайте строку запроса на тестовую страницу, которая предоставляет данные. Это не ужасная идея, но она может быстро стать громоздкой.
- Передайте общедоступный класс, который будет загружен тестовой страницей, содержащей тестовые данные. Это требует, чтобы на тестовой странице была ссылка на тестовый проект, что не очень хорошо.
- Динамически напишите и скомпилируйте тестовую страницу в тесте codedUI. Я даже не хочу начинать с этого.