Go 如何测试执行过程

Go 如何测试执行过程,go,Go,此代码正在执行二进制命令并返回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

此代码正在执行二进制命令并返回
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()
}
问题是,我不知道如何为它运行一个良好的测试,这将在每个系统中得到支持 e、 g.如果我尝试运行“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)
            }
        })
    }
}
我搜索了一下,发现了这个,
但是现在确定如何将env与我的测试结合起来…

使用Go-build标记或文件名。例如,对于Linux和Windows:

a_linux_test.go
(linux文件名):

l_test.go
(Linux构建标签):

a\u windows\u test.go
(windows文件名):

w_test.go
(Windows构建标记):

输出(在Linux上):

输出(在Windows上):


参考资料:


在不同的计算机上运行不同的命令platforms@zerkms-你能提供一些关于哪些命令的例子吗?因为我们不知道你是在plan9还是windows 98上,所以猜测是你的:)@vorspring-嗯,我的意思是只针对win10/darwin最新版本和linuxlatest@Vorsprung-但是任何可以在win10和linux上运行的示例对于meThanks 1+来说都是足够的,如果您可以在示例或linux或windows(对您来说更简单)中添加我提出的complite测试,这将有助于更好地理解此技巧,这将非常好。谢谢我的意思是把测试放在你的代码中,然后调用哪个命令…这就是我这里缺少的。。。
package main

import "testing"

func TestLinuxA(t *testing.T) {
    t.Log("Linux A")
}
// +build linux

package main

import "testing"

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

import "testing"

func TestWindowsA(t *testing.T) {
    t.Log("Windows A")
}
// +build windows

package main

import "testing"

func TestWindowsW(t *testing.T) {
    t.Log("Windows W")
}
$ 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
$ 
>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
>