Testing
Главный вопрос:
Как я пойму что это работает?
Сценарий:
- normal flow
- error flow (ошибки на уровне бизнес-логики)
exception flow (что-то, что должно было пойти нормально не так, ничего не можем поделать)
Проверяем, что работает тогда, когда должно работать. (1 тест в среднем)
- Проверяем, что не работает тогда, когда работать не должно (по 1 тесту на каждый случай)
Проверяем, что система ведет себя предсказуемо и надежно.
тестируем пограничные состояния
- ограничение каждое прописано в тз
Программист - тест "белый ящик"
QA - тест "черный ящик"
Smoke testing - тестирование без плана, просто тыкаем, чтобы система вела себя адекватно
Penetration testing - тестирование на безопасность
regression testing
etc.
TDD - test driven development
- пишем тест
- запускаем тест, убеждаемся, что тест проваливается
- пишем код, чтобы тест заработал
- рефакторим код и проверяем, что тест продолжает оставаться зеленым
BDD - behaviour driven development
Как пользователь я хочу ввести в такое поле то, в другое - это и увидеть то-то.
Единица функциональности (модуль)
Unit-тесты - TDD тестит ровно один модуль, остальные заменяются заглушками (stubs, mocks, spies)
Функциональные тесты - медленные (на рабочем проекте например полный набор проходит 4 часа)
stubs - когда кто-то что-то дернет - вернуть захаркодженые данные
mocks - stub с мозгами. Вернуть черный ящик и если передали что-то, вернуть что-то
spies - шпион. Отслеживает дергал ли кто-то внешний модуль (заглушку) с заданными параметрами
Testing Framework
- mocha + chai + sinon
- jasmine
ava (есть плагин для атома)
test runner
- assertion library
- библиотека для реализации заглушек