Unit Test Guide#

Overview#

对 Alfred Workflow 的源码进行单元测试一直是一个大难题. 这里我们利用了 afwf 框架中的 Handler 类. 每一个 Handler 类都有两个方法, def main(...)def handler(...). 其中 main 实现了核心的业务逻辑, 其本质就是一个 Python 函数, 你就按照正常的方式进行输入输出的单元测试即可. 而 handler 只是对 main 的一层封装, 将 input box 中的 query str 解析成 arg 传给 main 方法而已. 因此我们可以将 parse query 的逻辑单独做单元测试. 这样单元测试就已经完成了 99% 的工作了. 剩下的 1% 就是对 Workflow 的 Integration Test 了.

Example#

这里我们拿 memorize_cache.py 为例. 它的核心逻辑是根据 Key 生成一个随机数, 并且缓存 5 秒. 返回的对象是一个 ScriptFilter 对象, 而这个生成的随机数则保存在 ScriptFilter.items 列表中.

我们再来看 test_handler_memorize_cache.py 的测试用例. 测试用例仅仅是用同一个 key 调用了两次 main 函数, 然后比较 item 的 title 是不是一样. 是一样说明缓存起作用了.