Go語言測試中傳入命令行參數


本文展示該如何在Golang測試裡,傳入命令行(command-line)參數。

在Google搜尋 [1] 以及 Stack Overflow [2] 裡找到的答案無法在 Go 1.8.1 使用。 最後我發現這個問題 [3] 並搞清楚該如何正確地傳入參數。下面就是解答。

在Golang測試程式碼:

package goef

import (
      "flag"
      "testing"
)

var pkgdir = flag.String("pkgdir", "", "dir of package containing embedded files")

func TestGenerateGoPackage(t *testing.T) {
      t.Log(*pkgdir)
}

注意!你並不需要在測試程式碼裡呼叫 flag.Parse()

你可以以如下的方法傳入命令行參數:

$ export PKGDIR=${GOPATH}/src/github.com/siongui/myvfs
$ go test -v embed.go buildpkg.go buildpkg_test.go -args -pkgdir=${PKGDIR}

注意!如果 -args 不在 go test 命令裡,測試程式碼裡的 pkgdir 字串變數會是空的。


附錄

你也可以透過 environment variable 來在Golang測試裡傳參數。

在Golang測試碼:

package goef

import (
      "os"
      "testing"
)

func TestGenerateGoPackage(t *testing.T) {
      t.Log(os.Getenv("PKGDIR"))
}

可以以如下的方式傳參數:

$ export PKGDIR=${GOPATH}/src/github.com/siongui/myvfs
$ go test -v embed.go buildpkg.go buildpkg_test.go

Tested on: Ubuntu Linux 17.04, Go 1.8.1.


References:

[1]
[2]
[3]
[4]