單元測試(unit testing),是指對軟件中的最小可測試單元進行檢查和驗證。對于單元測試中單元的含義,一般來說,要根據(jù)實際情況去判定其具體含義,如 C 語言中單元指一個函數(shù),Java 里單元指一個類,圖形化的軟件中可以指一個窗口或一個菜單等??偟膩碚f,單元就是人為規(guī)定的最小的被測功能模塊。單元測試是在軟件開發(fā)過程中要進行的最低級別的測試活動,軟件的獨立單元將在與程序的其他部分相隔離的情況下進行測試。
單元測試的書寫、驗證,互聯(lián)網(wǎng)公司幾乎都是研發(fā)自己完成的,我們要保證代碼出手時可交付、符合預(yù)期。如果連自己的預(yù)期都沒達到,后面所有的工作,都將是額外無用功。
Lua 中我們沒有找到比較好的測試庫,參考了 Golang、Python 等語言的單元測試書寫方法以及調(diào)用規(guī)則,編寫了lua-resty-test測試庫,這里給自己的庫推廣一下,希望這東東也是你們的真愛。
nginx示例配置
#you do not need the following line if you are using
#the ngx_openresty bundle:
lua_package_path "/path/to/lua-resty-redis/lib/?.lua;;";
server {
location /test {
content_by_lua_file test_case_lua/unit/test_example.lua;
}
}
test_case_lua/unit/test_example.lua:
local iresty_test = require "resty.iresty_test"
local tb = iresty_test.new({unit_name="example"})
function tb:init( )
self:log("init complete")
end
function tb:test_00001( )
error("invalid input")
end
function tb:atest_00002()
self:log("never be called")
end
function tb:test_00003( )
self:log("ok")
end
-- units test
tb:run()
輸出日志:
TIME Name Log
0.000 [example] unit test start
0.000 [example] init complete
0.000 \_[test_00001] fail ...de/nginx/main_server/test_case_lua/unit/test_example.lua:9: invalid input
0.000 \_[test_00003] ↓ ok
0.000 \_[test_00003] PASS
0.000 [example] unit test complete