【发布时间】:2017-09-25 01:36:59
【问题描述】:
我想对单个文件 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 中定义的函数在script.lua 文件或单独的test_script.lua 文件中定义测试(最好使用luaunit,因为易于集成,但其他工具也可以)?
【问题讨论】:
-
这很大程度上取决于如何定义事物。你使用
local(这让事情变得更加困难)还是使用“本地_ENVironments”(更容易)?您的代码结构如何?请添加一个关于如何定义函数等的小代码示例(不一定是实际代码,只是与您定义内容的方式相匹配的虚拟函数。)目前,没有足够的信息来提供有意义的信息答案。 -
脚本锁定很像来自wiki.wireshark.org/Lua/Dissectors#postdissectors 的post dissector,在文件末尾定义了
local函数,这些函数在协议dissector函数中使用。但是我不坚持这种结构。
标签: unit-testing testing lua