ERT 测试交互命令的三种方式
内容提要
本文介绍了 Emacs 中 ERT 测试的三种工具:ert-simulate-keys、ert-simulate-command 和 ert-play-keys。ert-simulate-keys 用于模拟 minibuffer 输入,但无法触发命令;ert-simulate-command 直接调用命令,不经过 keymap;ert-play-keys 则模拟真实按键序列,能够触发 keymap 绑定的命令。这三者各有适用场景,满足不同的测试需求。
关键要点
-
本文介绍了 Emacs 中 ERT 测试的三种工具:ert-simulate-keys、ert-simulate-command 和 ert-play-keys。
-
ert-simulate-keys 用于模拟 minibuffer 输入,但无法触发命令。
-
ert-simulate-command 直接调用命令,不经过 keymap。
-
ert-play-keys 模拟真实按键序列,能够触发 keymap 绑定的命令。
-
这三者各有适用场景,满足不同的测试需求。
-
ert-simulate-keys 只能用于从 unread-command-events 读输入的函数,无法启动按键命令。
-
ert-simulate-command 直接调用命令,但不支持通过 call-interactively 调用。
-
ert-play-keys 可以触发 keymap 绑定的命令,并支持混合不同类型的输入。
延伸解读
三种工具的适用场景
在进行 Emacs ERT 测试时,选择合适的工具至关重要。ert-simulate-keys 适合测试 minibuffer 输入,而 ert-simulate-command 则用于直接调用特定命令。ert-play-keys 则是模拟用户真实按键的最佳选择,能够触发 keymap 绑定的命令。了解这些工具的适用场景,可以帮助开发者更有效地进行测试。
ert-simulate-command 的限制
尽管 ert-simulate-command 提供了直接调用命令的便利,但它不支持通过 call-interactively 调用命令。这意味着如果命令内部依赖于交互调用的判断,可能会导致测试结果不准确。因此,在使用时需特别注意命令的实现方式,以避免潜在的测试误差。
ert-play-keys 的优势
ert-play-keys 是 Emacs 31 新增的功能,它能够模拟真实的按键序列,完整触发命令循环。这使得它在测试用户交互时更为强大,能够处理复杂的输入场景,包括混合按键命令和文本插入。对于需要全面测试用户操作的场景,ert-play-keys 是一个理想的选择。
延伸问答
ERT 测试中有哪些工具可以使用?
ERT 测试中可以使用的工具有 ert-simulate-keys、ert-simulate-command 和 ert-play-keys。
ert-simulate-keys 的主要功能是什么?
ert-simulate-keys 用于模拟 minibuffer 输入,但无法触发命令。
ert-simulate-command 有什么限制?
ert-simulate-command 不能通过 call-interactively 调用命令,因此无法支持 called-interactively-p 的判断。
ert-play-keys 是什么,它解决了什么问题?
ert-play-keys 是 Emacs 31 新增的工具,用于模拟真实按键序列,能够触发 keymap 绑定的命令,填补了前两个工具的不足。
这三种工具各自适合什么场景?
ert-simulate-keys 适合测试 minibuffer 输入,ert-simulate-command 适合测试特定命令的执行效果,ert-play-keys 适合模拟用户真实按键操作。
如何使用 ert-play-keys 进行测试?
使用 ert-play-keys 时,需要配合 ert-with-test-buffer 的 :selected t 参数,以确保按键序列能正确路由到目标 buffer。