在 Busted 测试期间使用现有 Lua 文件中的 Mock 方法

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

如何实现这一点?

任何帮助都将不胜感激,谢谢。

点赞
用户783510
用户783510

我认为你不能轻易地替换本地函数,但可以轻松替换导出或全局函数。

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

local http = require 'resty.http'
http.new = function()
  return {
    request = function(self, args)
      -- ...一些模拟实现
    end
  }
end

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

local bar = require 'bar'
bar.foo = myMockImpl

通过覆盖_G可以更改全局函数或变量,例如,以下代码将更改全局函数或变量foo

_G.foo = ...

Busted支持自动恢复环境。在文档中搜索“insulate”即可。

2017-07-17 15:46:50