为了账号安全,请及时绑定邮箱和手机立即绑定

去测试:惊慌后清理

去测试:惊慌后清理

Go
慕码人8056858 2021-04-05 16:18:46
假设我为我的测试设置了一个带有数据库的Docker容器,并在testing.TestMain中进行了此操作,因为我希望此操作可以在全球范围内一次完成。我在其中编写了一个执行清理的defer语句testing.Main()(即,删除了数据库容器)。现在,假设出了点问题,我的测试出现了紧急情况。这个问题告诉我,我无法编写自定义recover代码来确保删除容器。的确是这样:testing.M.Run()它会自己recover()调用,并且似乎无法覆盖其行为。问题是:无论如何我该怎么做以确保执行清理代码?
查看完整描述

1 回答

?
狐的传说

TA贡献1804条经验 获得超3个赞

如问题所述,您链接到:

恐慌可能来自于由测试启动的goroutine,并且测试包无法向这些goroutine添加延缓程序来捕获恐慌。

另外,某些紧急情况无法恢复,例如由于内存不足或运行时内存损坏。

简而言之,您不能确保在任何情况下都可以执行任何代码。

如果清理不是很关键,则可以在清理之前和之后进行(例如,在测试开始时,在创建新容器之前检查容器是否已存在并销毁它,然后尽最大努力销毁它) )。如果清理很关键,则go test用一些东西(例如shell脚本或makefile)包装您的调用,并使包装器负责外部依赖项的建立和拆除。


查看完整回答
反对 回复 2021-04-19
  • 1 回答
  • 0 关注
  • 191 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信