fitnesse’in’developmentpublic.jugru.org/dotnext/2014/moscow/manushin.pdffitnesse(1) •...
TRANSCRIPT
FitNesse in Development
Манушин Игорь, Viacode LLC
Правила
• Вопросы желательно задавать в конце • Цифра в конце названия разделяет разные слайды с единой темой
FitNesse in Development 2
Где применялось? (1)
FitNesse in Development 3
Обработка процессов
База данных
Web сайт
Где применялось? (2)
4 FitNesse in Development
FitNesse in Development 5
Где применялось (3)
Где применялось? (4)
6
Обработка процессов
База данных
Web сайт
Автотесты
FitNesse in Development
FitNesse (1)
• Интеграционное тестирование • Первая версия: 2003 год, Роберт Мартин (на основе проекта fit) • Wiki разметка для тестировщиков • Свободный выбор языка программирования для разработчиков
7 FitNesse in Development
FitNesse (2)
8 FitNesse in Development
FitNesse (3)
9 FitNesse in Development
FitNesse (4)
10 FitNesse in Development
FitNesse (5)
11 FitNesse in Development
Как он устроен?
• КАРТИНКА
12
QA
FitNesse on Java
Runner on .Net
Code on .Net
Dev
FitNesse in Development
Пример кода
• | ‘’’ login as ‘’’ | DonJoe | • | ‘’’ create company ‘’’ | Example |
13
login as DonJoe
create company Example
public bool LoginAs(User userName) { /*...*/ }
Wiki
Html
C#
FitNesse in Development
Начало -‐ без тестов
• Environment настроен и запущен: сайт работает, сервисы работают • Руками создаем алгоритм • Система должна создать объекты, дождаться окончания, проверить статус
FitNesse in Development 14
Почему FitNesse?
• Установка: Java + скопировать jar файл • Запуск Web сервера: java -‐jar fitnesse-‐standalone.jar • Запуск теста: • h�p://yourSever:8080/SuiteName/TestName?test • java -‐jar fitnesse-‐standalone.jar –c SuiteName/TestName?test
• Тесты и результаты – текстовые файлы
15 FitNesse in Development
Первый тест
FitNesse in Development 16
Wait UnVl
• Если было хотя бы одно исключение – не ждем, сразу падаем • Если упал хотя бы один предыдущий wait – не ждем, сразу падаем • Всегда ждем с �meout • Раз в секунду проверяем ответ
FitNesse in Development 17
Check
• public Ma�erStatus StatusOfMa�erIs(string ma�erName) { … }
• Возвращаем результат. FitNesse напишет ожидаемый и реальный результаты.
FitNesse in Development 18
Добавляем еще тесты
FitNesse in Development 19
Имена
• Переменная, которая хранит имя страницы -‐ ${PAGE_NAME} • Все названия можно сделать производными от этой переменной: • define workflow_name = ${PAGE_NAME}_workflow • define ma�er_name = ${PAGE_NAME}_ma�er
FitNesse in Development 20
Удаление
• Начало каждого теста – удаление предыдущих запусков • Удаление точечное – игнорируем все объекты, которые нам не мешают • После всех тестов все результаты будут еще в базе
FitNesse in Development 21
Контекст (1)
FitNesse in Development 22
Контекст (2)
• Все тесты выполняются в одном домене, рабочие классы не пересоздаются • Для большого количества действий над одним объектом храним его в контексте и не пишем имя
FitNesse in Development 23
Таблица на вход (1)
FitNesse in Development 24
• public AddPar4cipantsFixture AddUserTaskWithFollowingPar�cipants (string newTaskName)
Таблица на вход (2)
internal sealed class AddPar�cipantsFixture {
public AddPa�cipant(string name, MemberType type) { }
}
FitNesse in Development 25
Таблица на выход
FitNesse in Development 26
Список на вывод
public IEnumerable HistoryOfForInstance(…) {
return dbModel.GetHistory(…).Select( row=> new {
Ac�on = row.GetField<Ac�vityAc�on>(…), Date = new
DateTimeWrapper(row.GetField<string>(…) ) }
}
FitNesse in Development 27
Анализ строки
• Runner определяет тип: • У типа есть зарегистрированный Parser – вызываем его (только NetRunner) • У типа есть публичный статический метод Parse – вызываем его
• Сравнение происходит с типами, а не со строками
FitNesse in Development 28
Подстановка даты (1)
public sealed class DateTimeWrapper {
private readonly string _line; public DateTimeWrapper(string str) {
_line = str; }
FitNesse in Development 29
Подстановка даты (2)
public sta�c DateTimeWrapper Parse(string inputLine) { var date = DateTime.UtcNow.ToString(); var replaced = inputLine.Replace( “{today}”, date); return new DateTimeWrapper(replace); }
FitNesse in Development 30
Подстановка даты (3)
• Пишем {today} • Сравниваем строки • Можем сравнивать и объекты
FitNesse in Development 31
Подитог
• Простые команды на вход • Списки на вход и выход • Подстановка имени тестов в объекты • И всё это – при понятных названиях !
FitNesse in Development 32
Автозапуск
• Шаг в CI • java.exe -‐jar fitnesse-‐standalone.jar –c SuiteName/TestName?test&format=xml • С помощью xsd создаем html для писем и сайта • Запуск дочерних процессов: • Через coverage tool • После остановки – сразу анализируем логи и выводим ошибки
FitNesse in Development 33
Описание функций
• Doxygen • Встроенные в NetRunner подсказки
FitNesse in Development 34
Вопросы ?
• h�p://fitnesse.org • NuGet: fitSharp & NetRunner • Доклад: h�p://1drv.ms/1Bsgzcf
FitNesse in Development 35