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. Сравнение бенчмарков.
|
Интеграционные тесты. 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
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