已创建一个函数,该函数根据输入返回0,1,2或3退出代码。为了避免代码需要在每次代码更改时都需要构建和手动测试,需要进行测试。
目标:在Golang中测试不同的退出代码
尝试
尝试一次
尝试两个
func ExitCodeOne() {
fmt.Println("Exit code 1")
os.Exit(1)
}
结果:
Your username is "bla2".Your username is "bla3".Exit code 1
FAIL tool 0.012s
因为退出代码1导致整个测试失败。
尝试3
func ExitCodeZero() {
fmt.Println("Exit code 0")
os.Exit(0)
}
结果:
ok tool 0.008s
而不是:
ok tool 0.009s coverage: 72.7% of statements
因为退出代码0停止测试,但测试能够退出而不会抛出错误,因为状态代码为0。
尝试4
import (
"os"
"testing"
. "github.com/onsi/gomega"
. "github.com/onsi/gomega/gexec"
)
func TestAttempt4(t *testing.T) {
session := ExitCodeOne()
Eventually(session).Should(Exit(0))
}
结果:
ExitCodeOne() used as value
问题
目前遇到以下问题:
期望的答案
需要能够将实际退出代码与预期退出代码进行比较的测试,例如:
func TestArgs(t *testing.T) {
ExitCodeOne()
actual:=<current_exit_code_to_string>
expected:=1
if actual != expected {
t.Errorf("Test failed, expected: '%s', got: '%s'", expected, actual)
}
}