我正在尝试用go编写一个单元测试,用于返回非零退出代码的函数。我正在用cobra开发一个CLI应用程序来验证语义版本。如果验证失败,我将返回JSON格式的一些信息,并使用os.Exit(1)
退出。
现在,我想测试一下这是否真的如预期的那样工作。在我的测试中,我通过了一个应该成功并返回0的数据集和一个应该失败并返回1的数据集。但是应该返回1的测试总是取消测试,因此取消所有后续迭代。这是我的代码:
func Test_ShouldGetCorrectExitCode(t *testing.T) {
testCases := []struct {
args []string
shouldBeValid bool
}{
{[]string{"0.1.0"}, false},
{[]string{"v0.1.0"}, true},
}
for _, tc := range testCases {
assert := assert.New(t)
cmd := NewCmdValidate()
cmd.SetArgs(tc.args)
err := cmd.Execute()
assert.Nil(err)
}
}
到目前为止,Assert还不是很复杂,因为我没有让测试以我期望的方式运行。有谁知道我怎么在围棋里测试退出密码吗?
1条答案
按热度按时间anauzrmj1#
最好的解决方案是不要在测试函数中调用
os.Exit
。一个好的做法是只从main()
调用os.Exit
,而让函数返回一个退出状态,这可以很容易地测试。范例:在你的测试中: