Метод testing.T.Fail

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

Синтаксис

got.Fail()

Пример использования

Давайте рассмотрим базовый пример использования метода testing.T.Fail в тесте:

gopackage main

import (
  "testing"
)

func TestDivision(t *testing.T) {
  result := 10 / 2
  if result != 5 {
    t.Fail()
  }
  
  // Этот код выполнится даже если тест уже помечен как проваленный
  if result > 0 {
    t.Log("Result is positive")
  }
}

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

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

Пример совместного использования с testing.T.Failed

Метод testing.T.Failed позволяет проверить, был ли тест помечен как проваленный. Это полезно для условного выполнения кода:

gopackage main

import (
  "testing"
)

func TestValidation(t *testing.T) {
  age := -5
  if age < 0 {
    t.Fail()
  }
  
  if t.Failed() {
    t.Log("Validation failed: age cannot be negative")
  }
  
  // Дополнительная проверка выполнится в любом случае
  if age > 0 && age < 18 {
    t.Log("User is underage")
  }
}

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

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

Пример сравнения с testing.T.FailNow

В отличие от testing.T.FailNow, метод testing.T.Fail не прерывает выполнение теста:

gopackage main

import (
  "testing"
)

func TestCompareFailMethods(t *testing.T) {
  // Пример с Fail - выполнение продолжается
  t.Log("Starting test with Fail")
  t.Fail()
  t.Log("This line is executed after Fail")
  
  // Пример с FailNow - выполнение прерывается
  t.Log("Starting test with FailNow")
  t.FailNow()
  t.Log("This line is NEVER executed")
}

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

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

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

  • метод testing.T.FailNow,
    который немедленно останавливает выполнение теста
  • метод testing.T.Failed,
    который проверяет, помечен ли тест как проваленный
  • метод testing.T.Error,
    который объединяет логирование ошибки и вызов Fail
  • метод testing.T.Fatal,
    который объединяет логирование ошибки и вызов FailNow