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

时间:2017-06-06 14:44:27

标签: unit-testing lua mocking resty lua-busted

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

如何实现这一目标?

任何帮助表示感谢,谢谢。

1 个答案:

答案 0 :(得分:1)

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

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

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

此方法适用于任何导出的函数。例如,要替换库foo中的函数bar

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

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

_G.foo = ...

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