我想從單個文件Lua腳本中測試函數,比如script.lua
。該腳本看起來像如下:如何測試單個文件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,因爲容易集成,但其他工具也可以)?
這取決於_how_你定義的東西lot_。你使用'local'(這會讓事情變得更難)還是你使用「local''ENV'ironments」(更容易)?你的代碼結構如何?請添加一個如何定義函數的小代碼示例(不一定是實際的代碼,只是與您定義的東西相匹配的虛函數)。目前,沒有足夠的信息來給出有意義的信息答案。 – nobody
該腳本非常類似於https://wiki.wireshark.org/Lua/Dissectors#postdissectors中的解析程序,在文件末尾定義了用於協議'dissector'函數的'local'函數。但我不堅持這種結構。 – thinwybk