Метод testing.T.FailNow

Метод testing.T.FailNow немедленно останавливает выполнение текущей тестовой функции, помечая тест как проваленный. В отличие от метода testing.T.Fail, который только устанавливает флаг ошибки, но продолжает выполнение, testing.T.FailNow прерывает исполнение теста прямо в точке вызова. Метод не принимает никаких параметров и не возвращает значений.

Синтаксис

got.FailNow()

Пример

Давайте проверим работу метода testing.T.FailNow в простом тесте:

gopackage main

import (
  "fmt"
  "testing"
)

func TestExample(t *testing.T) {
  fmt.Println("Начало теста")
  
  if 1+1 != 3 {
    t.FailNow()
  }
  
  fmt.Println("Этот код не выполнится")
}

Результат выполнения теста:

go"Начало теста"
"--- FAIL: TestExample (0.00s)"

Пример

Давайте сравним поведение testing.T.Fail и testing.T.FailNow в одном тесте:

gopackage main

import (
  "fmt"
  "testing"
)

func TestComparison(t *testing.T) {
  t.Fail()
  fmt.Println("Этот код выполнится")
  
  t.FailNow()
  fmt.Println("Этот код не выполнится")
}

Результат выполнения теста:

go"Этот код выполнится"
"--- FAIL: TestComparison (0.00s)"

Пример

Давайте используем testing.T.FailNow для остановки теста при обнаружении критической ошибки:

gopackage main

import (
  "fmt"
  "testing"
)

func divide(a, b int) int {
  if b == 0 {
    return 0
  }
  return a / b
}

func TestDivide(t *testing.T) {
  res := divide(10, 0)
  
  if res == 0 {
    t.FailNow()
  }
  
  fmt.Printf("Результат деления: %d", res)
}

Результат выполнения теста:

go"--- FAIL: TestDivide (0.00s)"

Смотрите также

  • метод testing.T.Fail,
    который только помечает тест как проваленный без остановки
  • метод testing.T.Fatal,
    который останавливает выполнение с выводом сообщения об ошибке
  • метод testing.T.Failed,
    который возвращает статус провала теста
  • метод testing.T.SkipNow,
    который останавливает выполнение теста без отметки об ошибке