鉴于此代码func doomed() { os.Exit(1)}我如何正确测试调用此函数将导致使用退出go test?这需要在一组测试中发生,换句话说,os.Exit()调用不会影响其他测试,应该被捕获。
3 回答
繁华开满天机
TA贡献1816条经验 获得超4个赞
我通过使用bouk/monkey来做到这一点:
func TestDoomed(t *testing.T) {
fakeExit := func(int) {
panic("os.Exit called")
}
patch := monkey.Patch(os.Exit, fakeExit)
defer patch.Unpatch()
assert.PanicsWithValue(t, "os.Exit called", doomed, "os.Exit was not called")
}
在处理这类工作、故障注入和其他困难任务时,monkey 是超级强大的。它确实带有一些警告。
蓝山帝景
TA贡献1843条经验 获得超7个赞
我认为如果os.Exit
不从外部(使用exec.Command
)过程模拟测试,就无法测试实际情况。
也就是说,您可以通过创建接口或函数类型,然后在测试中使用 noop 实现来实现您的目标:
package main
import "os"
import "fmt"
type exiter func (code int)
func main() {
doExit(func(code int){})
fmt.Println("got here")
doExit(func(code int){ os.Exit(code)})
}
func doExit(exit exiter) {
exit(1)
}
- 3 回答
- 0 关注
- 200 浏览
添加回答
举报
0/150
提交
取消