I am developing an web app with Go. So far so good, but now I am integrating Wercker as a CI tool and started caring about testing. But my app relies heavily on Cobra/Viper configuration/flags/environment_variables scheme, and I do not know how to properly init Viper values before running my test suite. Any help would be much appreciated.
2条回答 默认 最新
dongxian6715 2016-03-06 14:08关注When I use Cobra/Viper or any other combination of CLI helpers, my way of doing this is to have the CLI tool run a function whose sole purpose will be to get arguments and pass them to another method who will do the actual work.
Here is a short (and dumb) example using Cobra :
package main import ( "fmt" "os" "github.com/spf13/cobra" ) func main() { var Cmd = &cobra.Command{ Use: "boom", Short: "Explode all the things!", Run: Boom, } if err := Cmd.Execute(); err != nil { fmt.Println(err) os.Exit(-1) } } func Boom(cmd *cobra.Command, args []string) { boom(args...) } func boom(args ...string) { for _, arg := range args { println("boom " + arg) } }Here, the
Boomfunction is hard to test, but theboomone is easy.You can see another (non-dumb) example of this here (and the correspond test here).
本回答被题主选为最佳回答 , 对您是否有帮助呢?解决 无用评论 打赏 举报