Вот код, который мы хотим протестировать.
package search
// Find возвращает наименьший индекс i,
// при котором x <= a[i].
// Если такого индекса нет, он возвращает len(a).
// Срез должен быть отсортирован в порядке возрастания.
func Find(a []int, x int) int {
switch len(a) {
case 0:
return 0
case 1:
if x <= a[0] {
return 0
}
return 1
}
mid := len(a) / 2
if x <= a[mid-1] {
return Find(a[:mid], x)
}
return mid + Find(a[mid:], x)
}
- Поместите тестовый код в файл, имя которого заканчивается на _test.go.
- Напишите функцию TestXXX с единственным аргументом типа *testing.T. Фреймворк тестирования запускает каждую такую функцию.
- Чтобы указать неудачный тест, вызовите функцию отказа, такую как t.Errorf.
package search
import "testing"
var tests = []struct {
a []int
x int
exp int
}{
{[]int{}, 1, 0},
{[]int{1, 2, 3, 3}, 0, 0},
{[]int{1, 2, 3, 3}, 1, 0},
{[]int{1, 2, 3, 3}, 2, 1},
{[]int{1, 2, 3, 3}, 3, 3}, // ошибочный тестовый кейс
{[]int{1, 2, 3, 3}, 4, 4},
}
func TestFind(t *testing.T) {
for _, e := range tests {
res := Find(e.a, e.x)
if res != e.exp {
t.Errorf("Find(%v, %d) = %d, expected %d",
e.a, e.x, res, e.exp)
}
}
}
Запустите тесты с помощью go test.
$ go test
--- FAIL: TestFind (0.00s)
search_test.go:22: Find([1 2 3 3], 3) = 2, expected 3
FAIL
exit status 1
FAIL .../search 0.001s
Читайте также:
- Go FAQ: Как написать юнит-тест в Go?
- Команды go: go test, тестировать пакеты
- Функции тестирования в Golang
Комментариев нет:
Отправить комментарий