Rewriting the main() function for better testing
There exists a clever way that you can rewrite each main()
function in order to make testing (and benchmarking) a lot easier. The main()
function has a restriction, which is that you cannot call it from test code—this technique presents a solution to that problem using the code found in main.go
. The import
block is omitted to save space.
func main() {
err := run(os.Args, os.Stdout)
if err != nil {
fmt.Printf("%s\n", err)
return
}
}
As we cannot have an executable program without a main()
function, we have to create a minimalistic one. What main()
does is call run()
, which is our own customized version of main()
, send the desired os.Args
to it, and collect the return value of run()
:
func run(args []string, stdout io.Writer) error {
if len(args) == 1 {
return errors.New("No input!")
}
// Continue with the implementation of run()
// as you would...