【发布时间】:2017-06-08 00:32:52
【问题描述】:
所以我使用 Busted 为现有的 Lua 文件创建单元测试,尽可能不更改文件中的代码。该文件导入另一个文件,然后将该文件中的各种方法存储在本地函数中,就像这样。
[examplefile.lua]
local helper = require "helper.lua"
local helper_accept = helper.accept
local helper_reject = helper.reject
foo = new function()
-- do something which uses helper_accept
-- do something which uses helper_reject
end
我想在我的测试中监视这些方法,以确保它们在正确的位置被调用。但是,我无法从测试中找到任何方法来做到这一点。 我试过简单地模拟出辅助方法,如下所示:
[exampletest.lua]
local helper = require "helper.lua"
local examplefile = require "examplefile.lua"
-- mock the helper function to simply return true
helper.accept = new function() return true end
spy.on(helper, "accept")
examplefile:foo
assert.spy(helper).was().called()
但这不起作用,因为真实文件使用 helper_accept 和 helper_reject 方法,而不是 helper.accept 和 helper.reject。
这可以在不更改代码的情况下完成吗? 谢谢。
【问题讨论】:
-
没有。本地文件不会导出,因此您无法覆盖它们。但是你可以覆盖整个 helper.lua 文件,这样当它加载
helper.accept和helper.reject时,它会使用你的钩子版本的函数。 -
@ktb 这听起来是合乎逻辑的前进方向。你知道任何可以帮助我做到这一点的文档吗?
标签: unit-testing lua local lua-busted