четверг, 7 мая 2020 г.

Табличные юнит-тесты в Golang

Вот код, который мы хотим протестировать.

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


Читайте также:


Комментариев нет:

Отправить комментарий