Как построить программу как часть тестирования - PullRequest
0 голосов
/ 20 мая 2019

Я хочу проверить, что функция callProgram выполняет двоичный файл и правильно обрабатывает вывод.Для этого моей первоначальной мыслью было бы скомпилировать необработанный код, например:

package mytest

import (
    "testing"
)

const (
    binary_code = `
       package main

       func main() {
           // Glorious processing ...
       }
    `
)

func TestCall(t *testing.T) {
    p := buildTestProgram(binary_code, "~/testbinary")
    defer p.Delete()
    callProgram("~/testbinary")
}

Я изучил команду build (runBuild), и ее реализация достаточно проста.Проблема в том, что он живет в пространстве имен internal, а cmd/go, похоже, не представляет никакого способа вызова runBuild или подобного.

Поэтому мой вопрос заключается в том, как проверить определенный двоичный файл, а также иметьвзаимодействовать с хостинговой системой как можно меньше.

Да, я мог бы загрузить готовый двоичный файл, выполнить go build и т. д., но я был бы очень рад минимизировать шансы потенциальных ошибок / сложности, а такжебыть максимально портативным.

1 Ответ

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

Нет общедоступного API компилятора.

Самый простой способ протестировать ваше приложение - это вызвать / запустить существующий двоичный файл в системе.

Если вы не хотите полагатьсяв этом случае другой вариант заключается в том, чтобы ваш тест создал / записал двоичный файл во временную папку, протестировал вашу функцию и затем удалил временный файл.Это можно сделать легко / автоматически с помощью функции ioutil.TempFile().

Создание этого временного двоичного файла может или не может быть процессом компиляции Go.Поскольку это часть Go-теста, Go SDK уже должен быть установлен в вашей системе, поэтому вызов go не должен быть проблемой.

Ваш тест может также содержать содержимое крошечногозапускаемый исполняемый файл, который тест мог «сбросить» во временный файл.Такие крошечные двоичные файлы могут быть размером до 100 байт, например, см. Самый маленький x86 ELF Hello World .Информацию о том, как связать данные в приложение Go, см. В Какой лучший способ связать статические ресурсы в программе Go?

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