54ab7b69d1
Currently, packages in coverme without tests created by student are not checked for coverage, because no there are no test targets for them at all! The issue can be fixed by simply creating empty !change files, but we are engineers, aren't we? :) Bonus point: it prevents new packages from giving false coverage credit. For example, mock file generated by gomock will have lots of covered code almost instantly. However, the task can be hacked by adding new code to existing packages. |
||
---|---|---|
.. | ||
app | ||
client | ||
models | ||
utils | ||
main.go | ||
README.md |
coverme
В этой задаче нужно покрыть простой todo-app http сервис unit тестами.
Необходимо покрыть все sub-package'и. Package main можно не тестировать.
Существующие файлы менять не нужно. Нужно создавать новые файлы с тестами.
Тестирующая система будет проверять code coverage. Порог задан в coverage_test.go
Важно понимать, что coverage 100% - не решение всех проблем. В коде по-прежнему могут быть ошибки. Coverage 100% говорит ровно о том, что все строки кода выполнялись. Хорошие тесты в первую очередь тестируют функциональность.
Как посмотреть coverage:
go test -v -cover ./coverme/...
Coverage можно выводить в html (см. ссылки), и эта функциональность поддерживается в Goland.
Ссылки
- слайды: https://p.go.manytask.org/04-testing/lecture.slide
- cover: https://blog.golang.org/cover
- assertions: https://github.com/stretchr/testify
- gomock для создания мока базы данных при тестировании серевера
- httptest.ResponseRecorder для тестирования handler'ов сервера
- httptest.Server для тестирования клинета
- Если вы ждёте, когда же выложат лекцию: https://www.youtube.com/watch?v=ndmB0bj7eyw
O сервисе
Todo-app с минимальной функциональностью + client.
Запуск:
✗ go run ./coverme/main.go -port 6029
Health check:
✗ curl -i -X GET localhost:6029/
HTTP/1.1 200 OK
Content-Type: application/json
Date: Thu, 19 Mar 2020 21:46:02 GMT
Content-Length: 24
"API is up and working!"
Создать новое todo:
✗ curl -i localhost:6029/todo/create -d '{"title":"A","content":"a"}'
HTTP/1.1 201 Created
Content-Type: application/json
Date: Thu, 19 Mar 2020 21:41:31 GMT
Content-Length: 51
{"id":0,"title":"A","content":"a","finished":false}
Получить todo по id:
✗ curl -i localhost:6029/todo/0
HTTP/1.1 200 OK
Content-Type: application/json
Date: Thu, 19 Mar 2020 21:44:17 GMT
Content-Length: 51
{"id":0,"title":"A","content":"a","finished":false}
Получить все todo:
✗ curl -i -X GET localhost:6029/todo
HTTP/1.1 200 OK
Content-Type: application/json
Date: Thu, 19 Mar 2020 21:44:37 GMT
Content-Length: 53
[{"id":0,"title":"A","content":"a","finished":false}]