测试 – 如何测试golang命令行输出
发布时间:2020-12-16 09:26:16 所属栏目:大数据 来源:网络整理
导读:我想测试golang命令行应用程序的输出,但我不太确定如何使用go的测试库. 假设我有一个这样的程序: package mainimport ( "flag" "fmt")func main() { const ( cityDefault = "San Francisco" cityDoc = "the city you want the forecast for" ) var city str
我想测试golang命令行应用程序的输出,但我不太确定如何使用go的测试库.
假设我有一个这样的程序: package main import ( "flag" "fmt" ) func main() { const ( cityDefault = "San Francisco" cityDoc = "the city you want the forecast for" ) var city string flag.StringVar(&city,"city",cityDefault,cityDoc) flag.StringVar(&city,"c",cityDoc) flag.Parse() fmt.Println(city) } 我想测试这两个: $./myapp -c "Los Angeles" $./myapp -city "Los Angeles" …输出失落的洛杉矶.所以,我想问题是,你如何进行集成测试golang命令行应用程序的输出? 解决方法
这是解析命令行参数的一个不好的例子,但它显示了我用来在我的应用程序中测试命令行参数的框架.
main.go package main import ( "log" "os" ) func main() { var city string parseFlags(&city,os.Args) log.Println(city) } func parseFlags(result *string,args []string) { cityDefault := "San Francisco" switch len(args) { case 3: *result = args[2] default: *result = cityDefault } } main_unit_test.go package main import ( "log" "testing" ) // TestParseFlags - test our command line flags func TestParseFlags(t *testing.T) { var parseFlagsTests = []struct { flags []string // input flags to the command line expected string // expected }{ {[]string{"/fake/loc/main"},"San Francisco"},{[]string{"/fake/loc/main","-c","Los Angeles"},"--city",} for _,tt := range parseFlagsTests { var output string parseFlags(&output,tt.flags) if output != tt.expected { t.Errorf("expected: %s,actual: %s",tt.expected,output) } } } 我通常使用this package解析所有应用程序中的命令行参数.我将按如下方式构建我的代码(测试未显示,但它们通常遵循上面显示的测试要点): main.go package main import ( "log" "os" "myDir/cli" ) func main() { // Grab the user inputed CLI flags cliFlags := cli.FlagsStruct{} cliErr := cli.StartCLI(&cliFlags,os.Args) if cliErr != nil { log.Println("Error grabbing command line args") log.Fatal(cliErr) } // Do stuff ... } /myDir/cli.go package cli import "github.com/urfave/cli" // FlagsStruct - holds command line args type FlagsStruct struct { MyFlag string } // StartCLI - gathers command line args func StartCLI(cliFlags *FlagsStruct,args []string) error { app := cli.NewApp() app.Action = func(ctx *cli.Context) error { MyFlag := ctx.GlobalString("my-flag") // build the cli struct to send back to main cliFlags.MyFlag = MyFlag return nil } app.Authors = []cli.Author{ { Email: "my@email.com",Name: "Adam Hanna",},} app.Flags = []cli.Flag{ cli.StringFlag{ Name: "my-flag,f",Usage: "My flag usage goes here",Value: "myDefault",} app.Name = "myAppName" app.Usage = "My App's Usage" app.Version = "0.0.1" return app.Run(args) } (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |