@lavagod

Почему у меня при тестировании в Golang FAIL?

Здравствуйте. Проверяю тему "тестирование" в Golang. Написал простой тест (сравнение двух чисел, 3 варианта ответа), тестирование проходит, покрытие теста 100%, но почему в конце система пишет FAIL? Вроде бы по документации там должно стоять PASS.

Программа simple.go
package main

func Question(a int, b int) int{

	if a > b {
		return 1
	} else if a < b {
		return 2
	} else {
		return 3
	}
}


Программа simple_test.go
package main

import (
	"testing"
)

type twoValue struct {
    x int
    y int
}

var tests = []twoValue{
    { 1,2 },
    { 2,1 },
    { 2,2 },
}

func TestQuestion(t *testing.T) {

	for _, value := range tests {
		res := Question(value.x, value.y)
		if res == 1 {
			t.Errorf("Больше")
		}
		if res == 2 {
			t.Errorf("Меньше")
		}
		if res == 1 {
			t.Errorf("Равно")
		}
	}
}


Реакция на команду `go test -v -cover`
=== RUN   TestQuestion
--- FAIL: TestQuestion (0.00s)
    simple_test.go:26: Меньше
    simple_test.go:23: Больше
    simple_test.go:29: Равно
FAIL
coverage: 100.0% of statements
exit status 1
FAIL


Я чувствую, что делаю что-то не правильно, но что именно - понять не могу. Кто подкажет что исправить? (К слову, и подачу данных в тест наверно можно как-то попроще написать, но в уроке было в таком формата, через структуру.)
  • Вопрос задан
  • 81 просмотр
Решения вопроса 1
EvgenyMamonov
@EvgenyMamonov Куратор тега Go
Senior software developer, system architect
Вы три раза вызываете t.Errorf, как следствие получаете FAIL, чтобы тест был PASS - вызовова t.Errorf не должно быть. Т.е. вызывать t.Errorf нужно только в случае возникновения ошибки.

Должно быть приблизительно так
type twoValue struct {
    x int
    y int
    expected int
}

var tests = []twoValue{
    { 1,2, 1 },
    { 2,1, 2 },
    { 2,2, 0 },
}

func TestQuestion(t *testing.T) {

  for _, value := range tests {
    res := Question(value.x, value.y)
    if res != value.expected {
      t.Errorf("при сравнении %v с %v получили, %v, а должно быть %v", value.x, value.y, res, value.expected)
    }
  }
}
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы