Как проверить процесс выполнения - PullRequest
0 голосов
/ 21 ноября 2018

Этот код выполняет команды для двоичного кода и возврата std.out и std.error

func exe(bin string, args string, path string) (string, error string) {

    cmd := exec.Command(bin, strings.Split(args, " ")...)
    cmd.Dir = path
    stdoutBuf := &bytes.Buffer{}
    cmd.Stdout = stdoutBuf
    stdErrBuf := &bytes.Buffer{}
    cmd.Stderr = stdErrBuf
    cmd.Run()
    return stdoutBuf.String(), stdErrBuf.String()
}

Проблема в том, что я не знаю, как выполнить хороший тест для него, который будет поддерживаться в каждомсистема, например, если я пытаюсь запустить команду "echo", тестовый запуск выполняется в Darwin и Linux, но не в Windows.как я должен это сделать?

func Test_execute(t *testing.T) {
    type args struct {
        bin  string
        args string
        path string
    }
    tests := []struct {
        name       string
        args       args
        wantString string
        wantError  string
    }{
        // TODO: Add test cases.
    }
    for _, tt := range tests {
        t.Run(tt.name, func(t *testing.T) {
            gotString, gotError := exe(tt.args.bin, tt.args.args, tt.args.path)
            if gotString != tt.wantString {
                t.Errorf("exe() gotString = %v, want %v", gotString, tt.wantString)
            }
            if gotError != tt.wantError {
                t.Errorf("exe() gotError = %v, want %v", gotError, tt.wantError)
            }
        })
    }
}

Я искал это и нашел это, https://www.joeshaw.org/testing-with-os-exec-and-testmain/ Но теперь уверен, как объединить env с моим тестом ...

1 Ответ

0 голосов
/ 22 ноября 2018

Используйте Go строить теги или имена файлов.Например, для Linux и Windows:

a_linux_test.go (имя файла Linux):

package main

import "testing"

func TestLinuxA(t *testing.T) {
    t.Log("Linux A")
}

l_test.go (тег сборки Linux):

// +build linux

package main

import "testing"

func TestLinuxL(t *testing.T) {
    t.Log("Linux L")
}

a_windows_test.go (имя файла Windows):

package main

import "testing"

func TestWindowsA(t *testing.T) {
    t.Log("Windows A")
}

w_test.go (тег сборки Windows):

// +build windows

package main

import "testing"

func TestWindowsW(t *testing.T) {
    t.Log("Windows W")
}

Вывод (в Linux):

$ go test -v
=== RUN   TestLinuxA
--- PASS: TestLinuxA (0.00s)
    a_linux_test.go:6: Linux A
=== RUN   TestLinuxL
--- PASS: TestLinuxL (0.00s)
    l_test.go:8: Linux L
PASS
$ 

Вывод (в Windows):

>go test -v
=== RUN   TestWindowsA
--- PASS: TestWindowsA (0.00s)
    a_windows_test.go:6: Windows A
=== RUN   TestWindowsW
--- PASS: TestWindowsW (0.00s)
    w_test.go:8: Windows W
PASS
>

Ссылки:

Сборка пакета

Тестирование пакета

Команда go

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