Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

go test flag: flag provided but not defined

Tags:

go

Hi I am using a flag when testing in go:
file_test.go var ip = flag.String("ip", "noip", "test")

I am only using this in one test file. And it works fine when only testing that one test file, but when I run: go test ./... -ip 127.0.0.1 alle of the other test file saying: flag provided but not defined.

Have you seen this?

Regards

like image 913
Chris G. Avatar asked Apr 17 '15 13:04

Chris G.


3 Answers

flag.Parse() is being called before your flag is defined.

You have to make sure that all flag definitions happen before calling flag.Parse(), usually by defining all flags inside init() functions.

like image 89
JimB Avatar answered Nov 20 '22 09:11

JimB


If you've migrated to golang 13, it changed the order of the test initializer, so it could lead to something like

flag provided but not defined: -test.timeout

as a possible workaround, you can use

var _ = func() bool {
    testing.Init()
    return true
}()

that would call test initialization before the application one. More info can be found on the original thread:

https://github.com/golang/go/issues/31859#issuecomment-489889428

like image 15
lanwen Avatar answered Nov 20 '22 07:11

lanwen


do not call flag.Parse() in any init()

like image 2
hermosayang Avatar answered Nov 20 '22 09:11

hermosayang