我想对来自单个文件 Lua 脚本的函数进行单元测试,比如 script.lua
。该脚本如下所示:
-- some fields from gvsp dissector which shall be post processed in custom dissector
gvsp_field0_f = Field.new("gvsp.<field0-name>")
gvsp_field1_f = Field.new("gvsp.<field1-name>")
-- custom protocol declaration
custom_protocol = Proto("custom","Custom Postdissector")
-- custom protocol field declarations
field0_f = ProtoField.string("custom.<field0-name>","Custom Field 0")
field1_f = ProtoField.string("custom.<field1-name>","Custom Field 1")
-- register custom protocol as postdissector
register_postdissector(custom_protocol)
function custom_protocol.dissector(buffer,pinfo,tree)
-- local field values of "pre" dissector which are analyzed
local gvsp_field0_value = gvsp_field0_f()
local gvsp_field1_value = gvsp_field1_f()
-- functions which shell be unit tested
function0(...)
function1(...)
end
function0(...)
-- implementation
end
function1(...)
-- implementation
end
假设我不想将函数从脚本文件中分离到一个单独的模块文件中(这可能会使事情变得更容易)。我如何为 script.lua
中定义的函数定义测试(最好使用 luaunit 因为易于集成,但其他工具也可以) code> 文件或单独的 test_script.lua
文件?
最佳答案
要启用单独的脚本和单元测试执行,至少需要 3 个文件(在本例中为 4,因为由单个文件组成的单元测试框架 luaunit
已集成到项目目录中)。对于此示例,所有文件都位于同一目录中。脚本 script.lua
不能在其中定义任何函数,但必须从其模块 module.lua
中导入它需要的所有函数。
-- script imports module functions
module = require('module')
-- ... and uses it to print the result of the addition function
result = module.addtwo(1,1)
print(result)
module.lua
是根据Lua module skeleton实现的它的功能会自动注册以通过其他脚本文件或模块导入。
-- capture the name searched for by require
local NAME=...
-- table for our functions
local M = { }
-- A typical local function that is also published in the
-- module table.
local function addtwo(a,b) return a+b end
M.addtwo = addtwo
-- Shorthand form is less typing and doesn't use a local variable
function M.subtwo(x) return x-2 end
return M
test_module.lua
包含模块功能的单元测试,并导入 luaunit.lua
(单元测试框架)以供其执行。 test_module.lua
包含以下内容。
luaunit = require('luaunit')
script = require('module')
function testAddPositive()
luaunit.assertEquals(module.addtwo(1,1),2)
end
os.exit( luaunit.LuaUnit.run() )
如果您通过执行 lua test_module.lua
来运行测试,测试将与脚本功能分开执行。
.
Ran 1 tests in 0.000 seconds, 1 success, 0 failures
OK
脚本像往常一样使用 lua script.lua
执行,输出 2
。
关于unit-testing - 如何在单个文件 Lua 脚本中测试函数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46367353/