如何测试单个 Lua 脚本文件中的函数?
2017-9-22 21:48:18
收藏:0
阅读:150
评论:2
我想对单个 Lua 脚本文件中的函数进行单元测试,比如说 script.lua。脚本的样子大概是这样的:
-- 一些从 gvsp 解析器中获取的字段,将会在自定义解析器中进行后处理
gvsp_field0_f = Field.new("gvsp.<field0-name>")
gvsp_field1_f = Field.new("gvsp.<field1-name>")
-- 自定义协议声明
custom_protocol = Proto("custom","Custom Postdissector")
-- 自定义协议字段声明
field0_f = ProtoField.string("custom.<field0-name>","Custom Field 0")
field1_f = ProtoField.string("custom.<field1-name>","Custom Field 1")
-- 将自定义协议作为后处理器进行注册
register_postdissector(custom_protocol)
function custom_protocol.dissector(buffer,pinfo,tree)
-- "pre" 解析器中的局部字段值
local gvsp_field0_value = gvsp_field0_f()
local gvsp_field1_value = gvsp_field1_f()
-- 测试用的函数
function0(...)
function1(...)
end
function0(...)
-- 实现
end
function1(...)
-- 实现
end
比方说我不想将脚本文件中的函数分离到单独的模块文件中(虽然这样可能会更容易),那么该如何在 script.lua 文件内或者一个单独的 test_script.lua 文件中定义测试(最好使用 luaunit )以测试已经在 script.lua 中定义的函数呢?
点赞
用户5308983
为了启用单独的脚本和单元测试执行,至少需要 3 个文件(在此示例中为 4,因为单元测试框架 luaunit 由单个文件组成,已集成到项目目录中)。对于此示例,所有文件都存储在同一个目录中。脚本 script.lua 不能在其中定义任何函数,但必须从其模块 module.lua 导入其所有所需的函数。
--脚本导入模块函数
module = require('module')
-- ...并使用它来打印加法函数的结果
result = module.addtwo(1,1)
print(result)
module.lua 根据 Lua 模块骨架 实现,其函数会自动注册以供其他脚本文件或模块导入。
-- 捕获 require 搜索的名称
local NAME=...
-- 表格用于存储函数
local M = { }
-- 一个典型的本地函数,也会在模块表格中发布。
local function addtwo(a,b) return a+b end
M.addtwo = addtwo
-- 简写形式不需要键入较多代码,也不使用本地变量
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。
2017-09-24 14:46:34
评论区的留言会收到邮件通知哦~
推荐文章
- Lua 虚拟机加密load(string.dump(function)) 后执行失败问题如何解决
- 我想创建一个 Nginx 规则,禁止访问
- 如何将两个不同的lua文件合成一个 东西有点长 大佬请耐心看完 我是小白研究几天了都没搞定
- 如何在roblox studio中1:1导入真实世界的地形?
- 求解,lua_resume的第二次调用继续执行协程问题。
- 【上海普陀区】内向猫网络招募【Skynet游戏框架Lua后端程序员】
- SF爱好求教:如何用lua实现游戏内调用数据库函数实现账号密码注册?
- Lua实现网站后台开发
- LUA错误显式返回,社区常见的规约是怎么样的
- lua5.3下载库失败
- 请问如何实现文本框内容和某个网页搜索框内容连接,并把网页输出来的结果反馈到另外一个文本框上
- lua lanes多线程使用
- 一个kv数据库
- openresty 有没有比较轻量的 docker 镜像
- 想问一下,有大佬用过luacurl吗
- 在Lua执行过程中使用Load函数出现问题
- 为什么 neovim 里没有显示一些特殊字符?
- Lua比较两个表的值(不考虑键的顺序)
- 有个lua简单的项目,外包,有意者加微信 liuheng600456详谈,最好在成都
- 如何在 Visual Studio 2022 中运行 Lua 代码?

简单的答案是:你不能!
几年前,我向 Lua 团队询问过这个问题,因为脚本无法明确知道它是运行的主脚本还是已经包含被 'require' 的脚本。
未来看来也不打算添加这种功能!