Bincover example main method test
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
package main | |
import ( | |
"fmt" | |
"log" | |
"os" | |
"os/exec" | |
"regexp" | |
"testing" | |
"github.com/stretchr/testify/require" | |
"github.com/confluentinc/bincover" | |
) | |
func TestMainMethod(t *testing.T) { | |
const binPath = "./instr_bin" | |
// 1. Running a `go test` command to compile your instrumented binary. | |
// This could also be done outside of the test suite, in a Makefile, for example. | |
buildTestCmd := exec.Command("./build_instr_bin.sh") | |
output, err := buildTestCmd.CombinedOutput() | |
if err != nil { | |
log.Println(output) | |
panic(err) | |
} | |
// 2. Initializing a `CoverageCollector` | |
collector := bincover.NewCoverageCollector("echo_arg_coverage.out", true) | |
// 3. Calling `collector.Setup()` once before running all of your tests | |
err = collector.Setup() | |
require.NoError(t, err) | |
defer func() { | |
// 5. Calling `collector.TearDown()` after all the tests have finished | |
err := collector.TearDown() | |
if err != nil { | |
panic(err) | |
} | |
err = os.Remove(binPath) | |
if err != nil { | |
panic(err) | |
} | |
}() | |
tests := []struct { | |
name string | |
args []string | |
wantOutput string | |
outputPattern *regexp.Regexp | |
wantExitCode int | |
}{ | |
{ | |
name: "succeed running main with one arg", | |
args: []string{"hello"}, | |
wantOutput: "Your argument is \"hello\"\n", | |
wantExitCode: 0, | |
}, | |
{ | |
name: "fail running main with two args", | |
args: []string{"hello", "world"}, | |
wantOutput: "", | |
outputPattern: regexp.MustCompile(".*panic.*More than 2 arguments provided!"), | |
wantExitCode: 1, | |
}, | |
{ | |
name: "fail running main with no args", | |
args: []string{""}, | |
wantOutput: "Please provide an argument\n", | |
wantExitCode: 1, | |
}, | |
} | |
for _, tt := range tests { | |
fmt.Println(tt.name) | |
// 4. Running each test with the instrumented binary by calling `collector.RunBinary(binPath, mainTestName, env, args)` | |
output, exitCode, err := collector.RunBinary(binPath, "TestBincoverRunMain", []string{}, tt.args) | |
require.NoError(t, err) | |
if tt.outputPattern != nil { | |
require.Regexp(t, tt.outputPattern, output) | |
} else { | |
require.Equal(t, tt.wantOutput, output) | |
} | |
require.Equal(t, tt.wantExitCode, exitCode) | |
} | |
require.NoError(t, err) | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment