Undertale社区维基

模块:ScribuntoUnit/doc

欢迎来到Undertale社区维基(*`∀´*)ノ亻,如果想要参与条目创建或编辑,请先登录哦

这是模块:ScribuntoUnit的文档页面

内容协议

本文采取的内容协议为CC BY-SA 4.0
而不采用Undertale社区维基的通用内容协议!

 来自EN Wikipedia

本页面之全部或部分原来自EN Wikipedia的Module:ScribuntoUnit,依 CC BY-SA 4.0 授权引入;原贡献者可以在这里看到。经过双方编者的修改,内容可能已与来源有很大差异。

此模块为其他 Lua 模块提供单元测试。要测试一个模块,需创建独立的测试模块,通常放在 Module:模块名/testcases。

测试模块结构

local myModule = require('Module:MyModule')  -- 待测模块
local ScribuntoUnit = require('Module:ScribuntoUnit')
local suite = ScribuntoUnit:new()

然后向 suite 对象添加测试函数。任何以 test 开头的函数都会被识别为测试。

function suite:testSomeCall()
    self:assertEquals('期望值', myModule.someCall(123))
    self:assertEquals('另一个期望值', myModule.someCall(456))
end

最后返回 suite 对象:

return suite

运行测试

  • 调试控制台:require('Module:MyModule/testcases').run()
  • Wiki 页面:{{#invoke:MyModule/testcases|run}}(生成完整表格)
  • 紧凑模式:{{#invoke:MyModule/testcases|run|displayMode=short}}

断言方法

所有方法的最后一个参数 message 是失败时显示的自定义信息,可选。

assertEquals

self:assertEquals(expected, actual, message, level)

断言两值相等。若均为数字,则使用 delta=1e-8 的浮点容差比较。

self:assertEquals(4, calculator.add(2, 2))

assertNotEquals

self:assertNotEquals(expected, actual, message, level)

断言两值不等。

assertTrue / assertFalse

self:assertTrue(expression, message, level)
self:assertFalse(expression, message, level)

断言表达式为 true 或 false(Lua 中仅 false 和 nil 为 false)。

assertStringContains

self:assertStringContains(pattern, s, plain, message, level)

断言 pattern 出现于字符串 s 中。若 plain=true 则为字面匹配,否则为 ustring 模式匹配。

self:assertStringContains("foo", "foobar")          -- 通过
self:assertStringContains(".oo", "foobar")          -- 通过:匹配 "foo"
self:assertStringContains(".oo", "foobar", true)    -- 失败:. 按字面匹配

assertNotStringContains

self:assertNotStringContains(pattern, s, plain, message, level)

assertStringContains 的反向版本。

assertDeepEquals

self:assertDeepEquals(expected, actual, message, level)

递归比较表,尊重 __eq 元方法。

self:assertDeepEquals(table1, table2)

assertWithinDelta

self:assertWithinDelta(expected, actual, delta, message, level)

断言两浮点数之差在 delta 范围内。Lua 使用双精度浮点,0.3 - 0.2 == 0.1 实际为 false(浮点误差),应使用此方法。

self:assertWithinDelta(0.1, calculator.subtract(0.3, 0.2), 1e-10)

assertNotWithinDelta

self:assertNotWithinDelta(expected, actual, delta, message, level)

assertTemplateEquals

self:assertTemplateEquals(expected, template, args, message)

断言模板调用结果。注意 <pre>、<nowiki> 等标签会被转为 strip markers,导致比较失败。

self:assertTemplateEquals(4, 'add', {2, 2})  -- 等价于 {{add|2|2}} == 4

assertResultEquals

self:assertResultEquals(expected, text, message)

断言任意 wikitext 展开结果。

self:assertResultEquals(4, '{{#invoke:Calculator|add|2|2}}')

assertSameResult

self:assertSameResult(text1, text2, message)

断言两段 wikitext 展开结果相同。可用于验证模块与模板行为一致。

self:assertSameResult('{{add|2|2}}', '{{#invoke:Calculator|add|2|2}}')

assertThrows

self:assertThrows(fn, expectedMessage, message, ...)

断言函数抛出异常。可选检查异常消息是否匹配。

self:assertThrows(function() myModule.badCall() end, "参数错误")

assertDoesNotThrow

self:assertDoesNotThrow(fn, message, ...)

断言函数不抛出异常。

fail

self:fail(message)

无条件标记测试失败。

另见