lua单元测试

发布于 2021年 07月 02日 09:55

单元测试是软件开发中要进行的最初级的城市活动,是程序员自己的任务,而不是测试的任务。在单元测试中软件的独立单元将与程序的其他部分分隔来进行测试。

对程序员来说如果养成了对自己写的代码进行单元测试的好习惯,不但可以写出高质量的代码,而且还能提高自己的编程水平。

以下是lua中实现单元测试的例子:

1.测试框架

1.1  WriteCaseName(caseName);    --当前测试的用例名

1.2  WriteCaseStep(caseStep);         --当前测试步骤名

1.3  ret=AssertResult(expectResult,realResult)   --自动比较(选用)

1.4  WriteReport(ret,realResult)                 --将测试结果写入报告文件

 

1.5  GetStatistic()                    -- 获取测试执行情况统计

1.6  InitTestFrame()               --初始化测试框架,只能执行一次,否则会影响测试结果统计

1.7 SetCurrentModule(moduleName)     --当前测试模块名字

2.代码实现

--当前测试用例名字
function WriteCaseName(caseName)
 local h=io.open("f:luaunitCase.txt","a");
 local str=" 【"..caseName.."】".." ";
 h:write(str);
 h:close();
end

--当前测试步骤名
function WriteCaseStep(caseStep)
 local h=io.open("f:luaunitCase.txt","a");
 local str="  |--"..caseStep.." ";
 h:write(str);
 h:close();
end

--自动化比较
function AssertResult(expectResult,realResult)
 if expectResult==realResult then
  return "OK";
 else
  return "Error";
 end
end

--测试日志
function WriteMsg(msg)
 local h=io.open("f:luaunitCase.txt","a");
 local str=msg.." ";
 h:write(str);
 h:close();
end

--测试报告
function WriteReport(assertResult,realResult)
 local h=io.open("f:luaunitCase.txt","a");
 local str="  "..assertResult.." (RealResult:"..realResult..") ";
 h:write(str);
 h:close(); 
end

3.使用方法

function TestCaseAdd()
 local c=nil;
 for i=1,3 do
  local a=1;
  local b=1+i;
  WriteCaseName("TestCaseAdd");
  WriteCaseStep("setp:"..i);
  c=Add(a,b);  --被测函数
  ret=AssertResult(a+b,c);
  if ret=="Error" then
   WriteMsg("Error:"..i);
   break;         --当有错误的时候直接跳出,并给出第几次出的问题
  end

WriteReport(ret,c);
 end
 end

--被测函数
function Add(a,b)
 return a+b;
end

--执行测试用例
WriteMsg("test Add begin...");
TestCaseAdd();
WriteMsg("test Add end! ");

4.测试报告

注意:没有测试执行统计,有待完善。