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

标签 unit-testing testing lua

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

相关文章:

lua - 使用Lua调用C(Linux中)

android - 为什么 google 声明 UI 测试时应禁用动画?

c - C 中的测试单元用于服务器监听功能。避免监听阻塞调用

reactjs - 模拟意味着在 1 个节点上运行 = 0 找到

java - 如何停止方法调用 Mockito 中另一个类中的方法?

java - junit 4.10 : how to get the name of the tests class while running tests

testing - HP QC 中的缺陷状态类型

lua - 如何处理 Wireshark Lua 解剖器中的位字段?

lua 尝试调用方法 'len'(一个 nil 值)

python - 使用测试数据库测试 Django 数据库操作脚本