shad-go/coverme
2020-03-22 04:14:05 +03:00
..
app coverme: increase min coverage from 85% to 90% 2020-03-20 01:16:07 +03:00
client Fix imports. 2020-03-20 01:02:50 +03:00
models Unfished -> Unfinished 2020-03-22 04:14:05 +03:00
utils Adding todo-app coverage task. 2020-03-20 00:57:07 +03:00
main.go Fix imports. 2020-03-20 01:00:46 +03:00
README.md coverme: add links to slides and testify. 2020-03-20 02:14:23 +03:00

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.

Ссылки

  1. слайды: https://p.go.manytask.org/04-testing/lecture.slide
  2. cover: https://blog.golang.org/cover
  3. assertions: https://github.com/stretchr/testify
  4. gomock для создания мока базы данных при тестировании серевера
  5. httptest.ResponseRecorder для тестирования handler'ов сервера
  6. httptest.Server для тестирования клинета
  7. Если вы ждёте, когда же выложат лекцию: 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}]