gpt4 book ai didi

unit-testing - 如何在单个文件 Lua 脚本中测试函数?

转载 作者:行者123 更新时间:2023-11-28 19:53:08 28 4
gpt4 key购买 nike

我想对来自单个文件 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/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com