luassert库中的断言是否有类似于内置的'error'函数的`level`参数?
2017-11-30 21:54:38
收藏:0
阅读:131
评论:2
我目前正在使用busted/luassert编写测试套件,由于我将一些断言放在了一个单独的函数中,因此我得到了不准确的堆栈跟踪。例如,考虑下面的测试套件(a_spec.lua):
local function my_custom_assertion(x) -- 1
assert.is_true(x > 0) -- 2 <-
end -- 3
-- 4
describe("My test suite", function() -- 5
it("它们是正数", function() -- 6
my_custom_assertion(-10) -- 7 <-
my_custom_assertion(-20) -- 8 <-
end) -- 9
end) -- 10
运行时,我的测试用例失败,但堆栈跟踪指向第2行,因此我无法确定哪个断言失败了。
$busted spec/a_spec.lua
◼
0 successes / 1 failure / 0 errors / 0 pending : 0.002242 seconds
Failure → spec/a_spec.lua @ 6
My test suite 它们是正数
spec/a_spec.lua:2: 预期对象相同。
传递的值为:
(boolean) false
期望值为:
(boolean) true
是否有一种方式可以指向第7或8行?一种可能的方式是,如果luassert的assert.is_true函数具有类似于内置的error函数的level参数,那么这将是可能的。
查看luassert的源代码,似乎它确实关心堆栈级别,但我还没有弄清楚这个功能是内部的还是有些方法可以让用户使用。
点赞
用户90511
原来有一种方法可以解决我实际遇到的问题:找出是哪个断言引发了错误,而无需改变我的测试方式。通过使用 busted 命令加上 -v(--verbose)选项,它会在断言失败时输出完整的堆栈跟踪,而不仅仅提供单行号。
$ busted -v spec/a_spec.lua
0 successes / 1 failure / 0 errors / 0 pending : 0.003241 seconds
Failure → spec/a_spec.lua @ 6
My test suite they are positive
spec/a_spec.lua:2: Expected objects to be the same.
Passed in:
(boolean) false
Expected:
(boolean) true
stack traceback:
spec/a_spec.lua:2: in upvalue 'my_custom_assertion'
spec/a_spec.lua:7: in function <spec/a_spec.lua:6>
上述提到的第 7 行让我知道了是哪个断言引发了错误。
2017-12-03 04:56:54
评论区的留言会收到邮件通知哦~
推荐文章
- 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 代码?

翻译
不要通过创建一个调用
assert.xyzz ()的自定义断言来创建,而是创建一个返回true或false的函数,并将其与assert:register注册。请参阅README中的第二个示例。