Add example task. Provide documentation about testing.

This commit is contained in:
Fedor Korotkiy 2020-01-18 21:24:16 +03:00
parent f8c4f797c6
commit c4d3aeac0c
5 changed files with 69 additions and 1 deletions

View file

@ -37,7 +37,7 @@
Интеграционные тесты. Goroutine leak detector. TestingMain. Coverage. Сравнение бенчмарков.
6. Concurrency with shared memory. sync.Mutex. sync.RWMutex. sync.Cond. atomic. sync.Once.
Race detector. Async cache.
Race detector. Async cache. Работа с базой данных. database/sql. sqlx. gorm.
7. Package context. Passing request-scoped data. http middleware. chi.Router. Request cancellation.
Advanced concurrency patterns. Async cache. Graceful server shutdown. context.WithTimeout.
@ -71,3 +71,36 @@
5. Project layout.
6. Go proverbs. https://go-proverbs.github.io/
7. All stdlib packages.
## Тестирование задач
- Каждая задача должна лежать в отдельном пакете или пакетах.
- Зависимостей между пакетами на верхнем уровне быть не должно.
- Автоматические тесты на задачу должны запускаться через go test.
- Авторское решение задачи должно лежать в репозитори и включаться
билд тегом solution.
- Некоторые тесты в задаче могут быть приватными. Такие тесты должны
включаться билд тегом private. Эти тесты не будут доступны
студентам, но будут запускаться в момент проверки решения в
тестирующей системе.
- При посылке решения, на сервер отправляются все файлы внутри пакета.
- При тестировании, используются изменённые файлы пакета, и
оригинальные файлы тестов.
- Файл пакета можно защитить от изменения, добавив `// +build !change` в начало файла.
В этом случае, при тестировании посылки всегда будет использоваться оригинальная версия файла.
- Тесты могут использовать файлы из директории testdata. Менять testdata нельзя.
```sh
# Запуск тестов студентом
go test ./...
# Запуск тестов при разработке задачи
go test -tags solution,private ./...
# Запуск тестов на сервере
## 1. Скопировать файлы пакета из посылки.
## 2. Скопировать все файлы тестов из приватного репозитория.
## 3. Скопировать !change файлы из приватного репозитория.
## 4. Скопировать testdata из приватного репозитория.
go test -tags private ./...
```

3
go.mod Normal file
View file

@ -0,0 +1,3 @@
module gitlab.com/slon/shad-go
go 1.13

3
sum/foo.go Normal file
View file

@ -0,0 +1,3 @@
// +build !change
package sum

7
sum/sum.go Normal file
View file

@ -0,0 +1,7 @@
// +build !solution
package sum
func Sum(a, b int) int {
return 0
}

22
sum/sum_test.go Normal file
View file

@ -0,0 +1,22 @@
package sum
import (
"math"
"testing"
)
type testCase struct {
a, b, sum int
}
func TestSum(t *testing.T) {
for _, input := range []testCase{
{a: 2, b: 2, sum: 4},
{a: 2, b: -2, sum: 0},
{a: math.MaxInt64, b: 1, sum: math.MinInt64},
} {
if out := Sum(input.a, input.b); out != input.sum {
t.Errorf("%d + %d == %d != %d", input.a, input.b, out, input.sum)
}
}
}