Не могу понять причину по которой не проходят тесты

Собственно код на Го. Код - полностью рабочий, в нем ничего менять не надо.

package main

import "fmt"

func greet(name string){
	fmt.Printf("hello, %v !\n", name)
	bye := greet2(name)
	fmt.Printf("getting ready to say bye...\n")
	bye()
}

func greet2(name string) func() {
	fmt.Printf("how are you, %v ?\n", name)
	bye := func() {
		fmt.Println("ok bye!")
	}
	return bye
}

func main()  {
	greet("Sasha")
}

А вот код тестов, который не проходит.

package main

import "testing"

func TestGreet(t *testing.T)  {
	got := greet("Sasha") // ./scope_test.go:6:14: greet("Sasha") used as value
	want := "hello, Sasha !\nhow are you, Sasha ?\ngetting ready to say bye...\nok bye!\n"

	if got != want {
		t.Errorf("got %q want %q", got, want)
	}
}

Подскажите, что я делаю не так и где совершаю ошибку? Так как по правилам написания unit-тестов все должно срабатывать.


Ответы (1 шт):

Автор решения: Ainar-G

У вас странные представления о тестах. Функция bye ничего не возвращает. Либо собирайте строку и возвращайте её, например с помощью fmt.Sprintf, либо добавляйте io.Writer в качестве аргумена и используйте fmt.Fprintf, либо используйте примеры, если уж очень хотите именно fmt.Printf.

→ Ссылка