Add example task. Provide documentation about testing.
This commit is contained in:
parent
f8c4f797c6
commit
c4d3aeac0c
5 changed files with 69 additions and 1 deletions
35
README.md
35
README.md
|
@ -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
3
go.mod
Normal file
|
@ -0,0 +1,3 @@
|
|||
module gitlab.com/slon/shad-go
|
||||
|
||||
go 1.13
|
3
sum/foo.go
Normal file
3
sum/foo.go
Normal file
|
@ -0,0 +1,3 @@
|
|||
// +build !change
|
||||
|
||||
package sum
|
7
sum/sum.go
Normal file
7
sum/sum.go
Normal file
|
@ -0,0 +1,7 @@
|
|||
// +build !solution
|
||||
|
||||
package sum
|
||||
|
||||
func Sum(a, b int) int {
|
||||
return 0
|
||||
}
|
22
sum/sum_test.go
Normal file
22
sum/sum_test.go
Normal 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)
|
||||
}
|
||||
}
|
||||
}
|
Loading…
Reference in a new issue