-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathtest_unit.lua
More file actions
81 lines (66 loc) · 1.93 KB
/
test_unit.lua
File metadata and controls
81 lines (66 loc) · 1.93 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
local luaunit = require("lib.luaunit")
local function listTestFiles()
local modules = {}
local function scan(cmd)
local handle = io.popen(cmd)
if not handle then
return
end
for file in handle:lines() do
if file:match("^test_.+%.lua$") then
modules[#modules + 1] = "test." .. file:gsub("%.lua$", "")
end
end
handle:close()
end
if package.config:sub(1, 1) == "\\" then
scan('dir /b "test"')
else
scan("ls test")
end
table.sort(modules)
return modules
end
local function loadTestModules(modules)
for _, moduleName in ipairs(modules) do
local ok, err = pcall(require, moduleName)
if not ok then
error(("加载测试模块 %s 失败: %s"):format(moduleName, err))
end
end
end
local function collectTestClasses()
local names = {}
for globalName, globalValue in pairs(_G) do
if type(globalName) == "string"
and type(globalValue) == "table"
and globalName:match("^Test") then
names[#names + 1] = globalName
end
end
table.sort(names)
return names
end
local modules = listTestFiles()
if #modules == 0 then
print("未在 test/ 目录下发现测试文件,跳过执行。")
os.exit(0)
end
print(("正在加载 %d 个测试模块:"):format(#modules))
for _, moduleName in ipairs(modules) do
print(" • " .. moduleName)
end
loadTestModules(modules)
local testClasses = collectTestClasses()
print(("收集到 %d 个测试类:"):format(#testClasses))
for _, className in ipairs(testClasses) do
print(" • " .. className)
end
print("\n开始执行 LuaUnit 测试...")
local exitCode = luaunit.LuaUnit.run()
if exitCode == 0 then
print("\n所有测试通过!")
else
print(("测试存在失败,退出码 %d,详情见上方日志。"):format(exitCode))
end
os.exit(exitCode)