Я пробовал запустить sytemTest в этой статье: https://www.elastic.co/blog/code-coverage-for-your-golang-system-tests
так что сначала следуйте советам, я создаю системный тестовый файл с именем main_test.go вот так:
func TestSystem(t *testing.T) {
t.Logf("systemtest mod=%v", *SystemTest)
if *SystemTest {
t.Log("runing system test....")
main()
}
}
при выполнении этого модульного теста будет выполнена вся основная функция
затем я строю тестовый бинарник:
go test -c -covermode=count -coverpkg ./... -o main.test
и запустите тестовый файл birnary в моей тестовой среде
./main.test -systemTest -test.coverprofile ./coverage.cov
потому что программа будет слушать и ждать запроса клиента, поэтому она не выйдет, если я не выйду из manunal, что означает, что профиль обложки не будет генерироваться
поэтому я запускаю таймер, чтобы остановить программу через 15 секунд ... однако, когда программа завершается, профиль обложки все еще не генерируется
если тест не вызывает main, профиль обложки может быть обработан обычным образом
См. Основную функцию
var mkrtExitWait sync.WaitGroup
var mkrtExitCode int
var mkrtRunning bool = false
func MKrtRun() int {
mkrtExitWait.Add(1)
mkrtRunning = true
mkrtExitWait.Wait()
return mkrtExitCode
}
func MKrtExit(code int) {
if !mkrtRunning {
os.Exit(code)
} else {
mkrtRunning = false
mkrtExitCode = code
mkrtExitWait.Done()
}
}
func main() {
// listen and serve code
......
if *SystemTest { // a command flag
go func(){
time.Sleep(time.Second * 10)
MKrtExit(0)
}()
}
MKrtRun()
}
Я пробовал несколько способов создать файл покрытия, как указано ниже, но это не сработало:
отправить клиентский запрос, чтобы тестовый сервер выполнил os.Exit (0), когда программа запущена
отправить клиентский запрос, чтобы сообщить тестовому серверу выполнить panic (), когда программа запущена
убить процесс, чтобы принудительно выйти из программы
В чем проблема?
Как я могу создать файл покрытия?
go test -cover
выполнить работу. - person Volker   schedule 23.07.2018