去测试:惊慌后清理

假设我为我的测试设置了一个带有数据库的Docker容器,并在testing.TestMain中进行了此操作,因为我希望此操作可以在全球范围内一次完成。我在其中编写了一个执行清理的defer语句testing.Main()(即,删除了数据库容器)。

现在,假设出了点问题,我的测试出现了紧急情况。这个问题告诉我,我无法编写自定义recover代码来确保删除容器。的确是这样:testing.M.Run()它会自己recover()调用,并且似乎无法覆盖其行为。

问题是:无论如何我该怎么做以确保执行清理代码?


慕码人8056858
浏览 192回答 1
1回答

狐的传说

如问题所述,您链接到:恐慌可能来自于由测试启动的goroutine,并且测试包无法向这些goroutine添加延缓程序来捕获恐慌。另外,某些紧急情况无法恢复,例如由于内存不足或运行时内存损坏。简而言之,您不能确保在任何情况下都可以执行任何代码。如果清理不是很关键,则可以在清理之前和之后进行(例如,在测试开始时,在创建新容器之前检查容器是否已存在并销毁它,然后尽最大努力销毁它) )。如果清理很关键,则go test用一些东西(例如shell脚本或makefile)包装您的调用,并使包装器负责外部依赖项的建立和拆除。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Go