shad-go/coverme
Alexander Vasilyev 54ab7b69d1 Add coverpkg specification.
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.
2020-03-27 22:32:10 +03:00
..
app Add coverpkg specification. 2020-03-27 22:32:10 +03:00
client coverme: fix spacing. 2020-03-27 02:12:22 +03:00
models Update coverage_test.go 2020-03-27 02:10:51 +03:00
utils Update coverage_test.go 2020-03-27 02:10:53 +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}]