【发布时间】:2020-04-01 18:50:29
【问题描述】:
Racket 有一些简洁的测试库,包括Rackunit 和Mock。我想知道是否有一种标准方法可以使用这些库或其他库对正在测试的函数中的内部调用进行猴子补丁(例如,类似于 python 的mock.patch)。
也就是说,假设我们正在测试这个函数:
(define (compute x)
(+ 1 (consult-api x))
我们想检查compute 是否产生具有不同返回值consult-api 的预期结果,我们可以使用Rackunit checks 进行验证。为了测试的目的,我们想用模拟替换 consult-api。
mock 库suggests 为正在测试的函数添加关键字参数,以便我们可以在测试期间向它提供此类模拟以供使用,但我希望有一种不涉及修改原始函数的方法。
似乎我们在这里寻找的东西可以通过某种宏来完成,通过将consult-api 的实例重写为mock-consult-api,后者将是测试中定义的模拟。我对 Racket 宏不够熟悉,不知道是否可以在测试中定义这样的宏并将其应用于正在测试的模块的编译。
一个人应该如何以最好/最不可靠的方式完成这项工作?
【问题讨论】:
标签: unit-testing mocking racket rackunit