gpt4 book ai didi

unit-testing - 为期望按下的键继续的函数编写 Golang 单元测试

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

我在 Golang 中有一个这样的函数:

func Exit(code int) {
...
...
...
keyboard.Open()
defer keyboard.Close()
keyboard.GetKey()
PrintAndLogInfo("\nBye.")
os.Exit(code)
}

我正在使用以下库来使用此键盘功能

github.com/eiannone/keyboard

我想为此功能编写单元测试。但是, keyboard.GetKey() 需要按下一个键。也许正因为如此,当我运行调用函数 Exit 的测试时,它失败并显示错误:

panic :函数 GetKey() 应该在 Open() 之后调用 [已恢复] panic :函数 GetKey() 应该在 Open() 之后调用

我需要在这里模拟一些东西来修复这个错误吗?有什么想法吗?

最佳答案

实际上,错误function GetKey() should be called after Open() is triggered by keyboard.GetKey()。似乎 GetKey() 认为 Open() 从未被调用过。现在,在您的示例中,我们确实看到了 keyboard.Open() - 但 Open() 实际上可以返回一个 error,您似乎忽视。所以你应该检查错误是什么并在你的代码中处理它。

但是,这实际上并不能解决您的问题 - 因为您可能不希望每次运行单元测试时都按一个键(尤其是在 CI 环境中)。

如您所说,我会模拟键盘库。那就是:编写一个接口(interface)来完成您需要的事情,编写一个简单调用 keyboard 库的接口(interface)实现,并编写一个模拟实现来帮助测试。然后,该模拟可以直接从 GetKey()(或您在您的 界面中调用它的任何内容)返回。一个更先进的模拟可以有一些配置直接返回、休眠或永远不返回。

我已经创建了一个简单的示例来说明它是如何工作的,请参阅 https://gist.github.com/jorygeerts/e887856cc15b64cb9681639cd83c4a37 .请注意,对于您的测试,您可能还想注入(inject)一些东西来模拟 os.Exit() 以及您的 PrintAndLogInfo

关于unit-testing - 为期望按下的键继续的函数编写 Golang 单元测试,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53939522/

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