Go: печатать текст после запуска пакета? - PullRequest
1 голос
/ 03 мая 2019

Пакет тестирования захватывает все выходные данные и не распечатает их, если тест не пройден или не включена подробная (-v). Есть ли способ вывести текст после , если набор завершен без необходимости включать многословный текст?

Например:

func TestMain(m *testing.M) {
    status := m.Run(m)
    fmt.Println("important line to output")
    os.Exit(status)
}

Не будет печатать строку.


Редактировать: Я обнаружил, что fmt.Println будет работать, если вы запустите тесты изнутри пакета (go test), но не если один или несколько пакетов указаны (go test ./...), если не указан параметр -v включен.

1 Ответ

1 голос
/ 03 мая 2019

Пакет тестирования захватывает весь вывод и не печатает его, если тест не пройден или не включена многословная (-v)

Почему вы говорите, что стандартный вывод захвачен?Если я сохраню этот код в main_test.go и запусту go test:

package main

import (
    "fmt"
    "os"
    "testing"
)

func TestJoe(t *testing.T) {
    fmt.Println("from joe")
}

func TestMain(m *testing.M) {
    fmt.Println("before run")
    s := m.Run()
    fmt.Println("after run")
    os.Exit(s)
}

Я получу:

$ go test
before run
from joe
PASS
after run

О выводе с ./..., вот выдержка изgo help test:

Второй, называемый режимом списка пакетов, происходит, когда go test вызывается с явными аргументами пакета (например, 'go test math', 'go test. / ...',и даже «иди тест».В этом режиме go test скомпилирует и протестирует каждый из пакетов, перечисленных в командной строке.Если пакетный тест пройден, go test печатает только последнюю итоговую строку «ОК».Если пакетный тест не пройден, go test распечатывает полный тестовый вывод.При вызове с флагом -bench или -v go test печатает полный вывод даже для прохождения пакетных тестов, чтобы отобразить запрошенные результаты тестов или подробное ведение журнала.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...