假设我为我的测试设置了一个带有数据库的Docker容器,并在testing.TestMain中进行了此操作,因为我希望此操作可以在全球范围内一次完成。我在其中编写了一个执行清理的defer语句testing.Main()(即,删除了数据库容器)。现在,假设出了点问题,我的测试出现了紧急情况。这个问题告诉我,我无法编写自定义recover代码来确保删除容器。的确是这样:testing.M.Run()它会自己recover()调用,并且似乎无法覆盖其行为。问题是:无论如何我该怎么做以确保执行清理代码?
1 回答
狐的传说
TA贡献1804条经验 获得超3个赞
如问题所述,您链接到:
恐慌可能来自于由测试启动的goroutine,并且测试包无法向这些goroutine添加延缓程序来捕获恐慌。
另外,某些紧急情况无法恢复,例如由于内存不足或运行时内存损坏。
简而言之,您不能确保在任何情况下都可以执行任何代码。
如果清理不是很关键,则可以在清理之前和之后进行(例如,在测试开始时,在创建新容器之前检查容器是否已存在并销毁它,然后尽最大努力销毁它) )。如果清理很关键,则go test
用一些东西(例如shell脚本或makefile)包装您的调用,并使包装器负责外部依赖项的建立和拆除。
- 1 回答
- 0 关注
- 191 浏览
添加回答
举报
0/150
提交
取消