gpt4 book ai didi

testing - 去测试 : clean up after panic

转载 作者:数据小太阳 更新时间:2023-10-29 03:11:01 25 4
gpt4 key购买 nike

假设我为我的测试设置了一个带有数据库的 Docker 容器,我在 testing.TestMain 中这样做了因为我希望这一次在全局范围内完成。我在此 testing.Main() 中编写了一个 defer 语句来执行清理(即删除 DB 容器)。

现在,假设出了点问题,我的测试崩溃了。 This issue告诉我我无法编写自定义 recover 代码来确保删除容器。这是真的:testing.M.Run() 执行它自己的 recover() 调用,看起来没有办法覆盖它的行为。

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

最佳答案

如您链接到的问题中所述:

The panic could come from a goroutine started by a test and the testing package can't add a defer to those goroutines to catch the panic.

Aadditionally, some panics are impossible to recover, e.g. out of menory or runtime memory corruption.

简而言之,您无法确保任何代码都会在所有情况下执行。

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

关于testing - 去测试 : clean up after panic,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51727970/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com