New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
юнит-тест для простой валидации #32
Conversation
|
Собственно, тесткейсы должны покрывать все случаи, описанные в спецификации как поведение сервиса простой валидации. Первая и главная задача юнит-тестов — проверять компонент в целом на соответствие спеке. Важная разница между юнит-тестами и просто тестами: просто тесты могут переписываться в процессе рефакторинга и оптимизации, когда меняется внутренняя логика; юнит-тесты должны переписываться только при изменении спецификации, а изменения внутренней логики их затрагивать не должны. |
|
Я правильно понимаю, что сейчас ошибка из-за того что нельзя привести пользовательский тип square из пакета board к типу int8? Может всё-таки имеет смысл сделать square экспортируемым? |
Нет, сейчас ошибка из-за того, что |
…ests for StatusOK, StatusForbidden & StatusBadRequest
|
Привет! |
|
А откуда взялся |
|
Кажется логичным, что в случае некорректных входных данных (несуществующая фигура, клетка и т.п.) выводится более говорящее StatusBadRequest, а не информация о невалидном ходе, ведь валидировать тогда нечего |
Это логично, я согласен; но тогда надо внести соответствующую правку в спецификацию ;) |
|
Посмотри, как я переделал тест для простой валидации, сохранив все тесткейсы ;) «Зачем делать сложным то, что проще простого?» |
Да, грешу тем что усложняю... В спеку внесла изменения |
|
Добавил fuzz-тест. Это устроено немножко не так, как обычный тест. По коду можно догадаться, что там заданы три строки, которые тестируются в качестве query, и при обычном запуске командой Зато если запустить Фактически, этим тестом мы проверяем, что в ответ на любой возможный запрос наш сервис отвечает одним из трёх возможных по спеке статусов (к сожалению, тут не получается проверить, правильный ли это будет ответ, но для того у нас есть юнит-тесты), и никакой запрос не приводит к падению, панике или чему-то подобному. Поскольку этот сервис у нас будет «торчать наружу», и запрос может послать кто угодно, нам полезно знать, что злые хакеры не смогут уронить его или добиться неожиданного поведения — для того и fuzz-тестирование. Подробно про то, как в Go работает fuzz — в документации. ;) |
|
И да, я погонял на своём ноутбуке этот fuzz-тест минут десять, ничего не нашлось ;) |
|
Евгений, спасибо, вроде понятно. Есть еще какие-то тесты, которые нужно сделать? Или могу мержить? |
|
Ну, ещё надо сделать тестов на остальные этапы валидации :))) |
|
Если речь про advanced, то оно в процессе :) но там работы намнооого больше чем в simple |
Начинаем добавлять юнит-тесты :)))
Обрати внимание, этот тест — в пакете
validation_test, а не в пакетеvalidation; это сделано нарочно, чтобы у теста не было доступа к внутренней логике пакета, и он проверял только взаимодействие пакета с внешним миром. В данном случае это пока не имеет значения, но уже на следующей итерации — начнёт, увидишь ;)По сути же единственного написанного теста — это тот же самый «табличный» тест, в котором поднимается сервер (пакет
httptestсам разберётся, какой порт наlocalhostсвободен, и поднимет там, а вsrv.URLположит адрес того, что получилось), и об него тестируются URL с соответствующими полями.Тесткейсов надо набросать побольше, но я остановился пока на одном, потому что первый же тесткейс, который пришёл мне в голову, нашёл баг (вот тут) ;-)