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. Сравнение бенчмарков. Интеграционные тесты. Goroutine leak detector. TestingMain. Coverage. Сравнение бенчмарков.
6. Concurrency with shared memory. sync.Mutex. sync.RWMutex. sync.Cond. atomic. sync.Once. 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. 7. Package context. Passing request-scoped data. http middleware. chi.Router. Request cancellation.
Advanced concurrency patterns. Async cache. Graceful server shutdown. context.WithTimeout. Advanced concurrency patterns. Async cache. Graceful server shutdown. context.WithTimeout.
@ -71,3 +71,36 @@
5. Project layout. 5. Project layout.
6. Go proverbs. https://go-proverbs.github.io/ 6. Go proverbs. https://go-proverbs.github.io/
7. All stdlib packages. 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)
}
}
}