unit-testing - 在 Racket 中使用模拟对象进行猴子修补

标签 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向被测试的函数添加关键字参数,以便我们可以为其提供此类模拟以供在测试期间使用,但我希望有一种不涉及修改原始函数的方法。

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

一个人应该如何以最好的/最好的方式实现这一目标?

最佳答案

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

您还可以查看单元,它旨在允许灵活的运行时链接。公平地说,它们在过去 20 年中并没有得到太多使用。

关于unit-testing - 在 Racket 中使用模拟对象进行猴子修补,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60978234/

相关文章:

node.js - 使用 Mocha 进行测试之前清除集合

javascript - React 和 jest 模拟模块

unit-testing - 可以将 MS Fakes 垫片与 NSubstitute 模拟一起使用吗?

ruby-on-rails - 如何在 RSpec 中多次说 "any_instance" "should_receive"

image - 翻转图像似乎使用惰性评估

scheme - 如何编写方案 cond 以便它返回嵌套 cond 的值

unit-testing - 模拟 Microsoft Application Insights API

c# - NSubstitute 模拟一个没有参数的 void 方法

go - 模拟 mgo 链接函数

list - 在 Racket 中,列表相对于向量的优势是什么?