用Racket中的模拟对象修补猴子

时间:2020-04-01 18:50:29

标签: unit-testing mocking racket rackunit

Racket有一些简洁的测试库,包括RackunitMock。我想知道是否有使用这些库或其他库的标准方法来对正在测试的函数进行内部修补(例如类似于python的mock.patch)。

也就是说,假设我们正在测试此功能:

(define (compute x)
  (+ 1 (consult-api x))

我们要检查compute产生的期望结果具有不同的consult-api返回值,我们可以使用Rackunit checks进行验证。为了测试目的,我们想用模拟代替consult-api

模拟库suggests在要测试的函数中添加了关键字参数,以便我们可以在测试过程中向其提供此类模拟,但我希望采用一种不涉及修改原始函数的方式。 / p>

似乎我们在这里寻找的东西可以通过某种形式的宏来实现,方法是将consult-api的实例重写为mock-consult-api,后者将是测试中定义的模拟。我对Racket宏不太熟悉,无法知道是否可以在测试中定义这样的宏并将其应用于正在测试的模块的编译。

一个人应该如何以最佳/最快的方式做到这一点?

1 个答案:

答案 0 :(得分:0)

您绝对可以使用宏来执行此操作。如果您允许自己在文件顶部添加一两行,它将变得更加容易。我声称,Racket的设计原则之一是强大的独立编译原则。也就是说,文件的含义取决于文件的文本(当然也取决于其所需模块的含义)。

您可能还会考虑单元,这些单元旨在允许灵活的运行时链接。公平地说,它们在过去20年中没有得到太多使用。

相关问题