ERT 测试交互命令的三种方式

💡 原文中文,约4600字,阅读约需11分钟。
📝

内容提要

本文介绍了 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。

🏷️

标签

➡️

继续阅读