Busted 测试期间模拟现有 lua 文件中的方法

Rya*_*yan 4 lua unit-testing mocking resty lua-busted

我想使用 Busted 为现有的 lua 文件编写单元测试。我想在测试期间交换一些方法,以便文件使用模拟/存根方法而不是真实方法运行(否则它将失败)。文件调用的一些方法是从其他 lua 库中提取的,我也想模拟这些方法。

如何才能实现这一目标?

任何帮助表示赞赏,谢谢。

Phi*_*ßen 5

我认为您无法轻松替换本地函数,但替换导出或全局函数很简单。

http:new().request(...) 例如,我需要通过库模拟 HTTP 调用rest.http。这就是我在测试中所做的:

local http = require 'resty.http'
http.new = function()
  return {
    request = function(self, args)
      -- ... some mock implementation
    end
  }
end
Run Code Online (Sandbox Code Playgroud)

这种方法应该适用于任何导出的函数。例如,替换foo库中的函数bar

local bar = require 'bar'
bar.foo = myMockImpl
Run Code Online (Sandbox Code Playgroud)

更改全局函数或变量可以通过覆盖来实现_G,例如,这将更改全局函数或变量foo

_G.foo = ...
Run Code Online (Sandbox Code Playgroud)

Busted 支持自动恢复环境。在文档中搜索“绝缘” 。