lua单元测试框架-lunit-0.4文档
lunit-0.4文档
译者: | gashero |
---|
1 译者序
习惯了单元测试,而不习惯调试器。所以学了lua以后一直寻找这个东西,发现效果不错。
2 初始化
使用 lunit 单元测试框架所需的文件如下: lunit 、 lunit.lua 、 lunit-console.lua 。
编写测试用例需要导入模块。而 lunit 是一个shell脚本用于寻找 lunit.lua 和 lunit-console.lua 。
require "lunit"
lunit 使用lua-5.1的模块系统。测试用例是被标志为”lunit.testcase”的模块,例如:
require "lunit" module("my_testcase",lunit.testcase,package.seeall)
实际的测试用例就是模块中以 test 开头或结尾的函数,函数名大小写无关。例如:
require "lunit" module("my_testcase",lunit.testcase,package.seeall) function FirstTest() --Test code goes here end function test_something() --Test code goes here end
3 断言函数
测试函数中可以使用多种断言函数,用于测试代码或包。 lunit 定义了26个断言函数如下:
- fail([msg]) :总是失败。
- assert(assertion,[msg]) :如果assertion为false或nil时失败。
- assert_true(actual,[msg]) :当actual不为true时失败。
- assert_false(actual,[msg]) :断言为假
- assert_equal(expected,actual,[msg]) :断言相等
- assert_not_equal(expected,actual,[msg]) :断言不等
- assert_match(pattern,actual,[msg]) :使用字符串匹配断言
- assert_not_match(pattern,actual,[msg]) :不匹配
- assert_nil(actual,[msg]) :断言nil
- assert_not_nil(actual,[msg]) :断言非nil
- assert_boolean(actual,[msg]) :断言为true或false
- assert_not_boolean(actual,[msg]) :断言非true或false
- assert_number(actual,[msg]) :断言为数字
- assert_not_number(actual,[msg]) :断言非数字
- assert_string(actual,[msg]) :断言为字符串
- assert_not_string(actual,[msg]) :断言为非字符串
- assert_table(actual,[msg]) :断言为表格
- assert_not_table(actual,[msg]) :断言非表格
- assert_function(actual,[msg]) :断言为函数
- assert_not_function(actual,[msg]) :断言非函数
- assert_thread(actual,[msg]) :断言为协程
- assert_not_thread(actual,[msg]) :断言非协程
- assert_userdata(actual,[msg]) :断言为userdata
- assert_not_userdata(actual,[msg]) :断言非userdata
- assert_error([msg],func) :断言func执行会出错
- assert_pass([msg],func) :断言func执行不出错
所有如上函数最后一个参数都是可选的错误信息。只有 assert_error() 和 assert_pass() 例外。
下面的函数也很有用,用于测试值的类型:
- is_nil(actual)
- is_boolean(actual)
- is_number(actual)
- is_string(actual)
- is_table(actual)
- is_function(actual)
- is_thread(actual)
- is_userdata(actual)
这些函数在actual类型正确时返回true,否则返回false。
可以在你的代码中使用断言函数和 is_type 函数来测试代码或包,例如:
require "lunit" module("my_testcase",lunit.testcase,package.seeall) function FirstTest() local result=compute_some_value() assert_string(result) assert_equal("foobar",result) end function test_something() local result=flip_coin() assert_number(result) if result==0 then --ok elseif result==1 then --ok else fail("flip_coin: invalid number: "..tostring(result)) end end
4 测试会话函数
可以定义 setup() 和 teardown() 函数,用于每次调用测试函数时的资源初始化和释放。例如:
require "lunit" module("resource_testcase",lunit.testcase,package.seeall) local orig_content,handle function setup() orig_content={"row1","row2","row3"} handle=database_open("test.db") database_create_table(handle,...) database_fill_table(handle,orig_content,...) end function teardown() database_drop_table(handle,...) database_close(handle) handle=nil orig_content=nil delete_file("test.db") end function test_select() --... end function test_insert() --... end function test_delete() --... end
5 运行单元测试
$ ./lunit my_testcase.lua