Метод testing.T.Run
Метод T.Run выполняет функцию теста как субтест (подтест)
с указанным именем. Он принимает два параметра: имя субтеста
(тип string) и функцию, которая получает указатель на
T для выполнения проверок внутри субтеста. Метод
возвращает bool, указывающее, завершился ли субтест
успешно (true) или с ошибкой (false).
Синтаксис
func (t *T) Run(name string, f func(t *T)) bool
Пример
Создадим субтест с именем "subtest1" внутри основного теста:
package main
import (
"testing"
)
func TestMain(t *testing.T) {
t.Run("subtest1", func(t *testing.T) {
// Проверка внутри субтеста
if 2+2 != 4 {
t.Error("2+2 должно быть 4")
}
})
}
Пример
Метод T.Run позволяет выполнять несколько субтестов
последовательно. Результат каждого субтеста возвращается отдельно:
package main
import (
"fmt"
"testing"
)
func TestMain(t *testing.T) {
res1 := t.Run("subtest1", func(t *testing.T) {
if 3*3 != 9 {
t.Error("3*3 должно быть 9")
}
})
res2 := t.Run("subtest2", func(t *testing.T) {
if 4+4 != 8 {
t.Error("4+4 должно быть 8")
}
})
fmt.Println("subtest1 результат:", res1)
fmt.Println("subtest2 результат:", res2)
}
Результат выполнения кода:
"subtest1 результат: true"
"subtest2 результат: true"
Пример
Субтесты могут быть вложенными — внутри одного субтеста можно запускать другие субтесты:
package main
import (
"testing"
)
func TestMain(t *testing.T) {
t.Run("group", func(t *testing.T) {
t.Run("subtest1", func(t *testing.T) {
if 1+1 == 2 {
// проверка пройдена
}
})
t.Run("subtest2", func(t *testing.T) {
if 2*3 == 6 {
// проверка пройдена
}
})
})
}
Пример
С помощью T.Run удобно запускать параллельные тесты
вместе с T.Parallel:
package main
import (
"testing"
)
func TestMain(t *testing.T) {
t.Run("parallel1", func(t *testing.T) {
t.Parallel()
if 5*5 != 25 {
t.Error("5*5 должно быть 25")
}
})
t.Run("parallel2", func(t *testing.T) {
t.Parallel()
if 10/2 != 5 {
t.Error("10/2 должно быть 5")
}
})
}
Смотрите также
-
метод
testing.T.Parallel,
который помечает тест для параллельного выполнения -
метод
testing.T.Error,
который сообщает об ошибке, но продолжает выполнение -
метод
testing.T.Fatal,
который сообщает об ошибке и останавливает выполнение теста -
метод
testing.B.Run,
который запускает суббенчмарки внутри бенчмарка