问题
如何计算测试用例的结果以追踪通过的(pass)用例和失败用例的个数。
设计
使用简单的整数计数器,在每次开始运行测试的时候,把计数器初始化为0。
方案
int numPass = 0, numFail = 0;
while ((line = sr.ReadLine()) != null)
{
//此处对"line"进行解析
if(method == "ArithmeticMean")
{
actual = MathLib.Methods.ArithmeticMean(input);
if(actual.ToString("F4") == expected)
{
Console.WriteLine("Pass");
++numPass;
}
else
{
Console.WriteLine("*FAIL*");
++numFail;
}
}
else
{
Console.WriteLine("Unknown method");
//对numPass或numFail没有影响
}
}//loop
Console.WriteLine("Number cases passed = " + numPass);
Console.WriteLine("Number cases failed = " + numFail);
Console.WriteLine("Total cases = " + (numPass + numFail));
double percent = ((double)numPass) / (numPass + numFail);
Console.WriteLine("Percent passed = "+ percent.ToString("P"));
注解
很多时候,计算并记录一些总结性的数据是非常有用的,比如通过的和失败的测试用例。如果每天都追踪这些数值,就可以由些试题软件系统质量的变化情况。我们还可能想要记录并追踪测试用例通过的百分比,因为大多数产品文档都有所谓的“退出条件(exit criteria)”,类似于“到里程碑MM3,API测试的用例通过率必须达到99.95%”,我们可以声明一个整型变量在进入测试程序的主循环之前马它初始化为0。如果测试用例通过,就把表示通过的计数器加1;如果测试用例失败,则把表示失败的计数器加1。运行完所有的测试之后,可以把总结性的结果显示出来或者写到一个外部文件里。
在上述方案中,我们跟踪测试用例通过的次数和失败的次数,然后把它们相加,得到总共的运行测试用例个数。也可以加上一个numCases计数器,在每个测试用例完成之后把这个计数器加1,从而根据这个计数器的值难测试套件的逻辑是否正确:
if(actual.ToString("F4") == expected)
{
Console.WriteLine("Pass");
++numPass;
++numCases;
}
else
{
Console.WriteLine("*FAIL*");
++numFail;
++numCases;
}
//etc.
if((numPass + numFail) != numCases)
Console.WriteLine("Warning:Counter logic failure");
计算通过率的时候,要记住把整数或分数转换成double类型,这样做除法的时候其结果就可以隐式的转换成double:
double percent = ((double)numPass) / (numPass + numFail);
如果不进行转换,所实施的操作就是整数相数,其结果总是1.0(100%)或者0.0(0%)。如果不用C#的显式转换,也可以通过与1.0左乘法实施一个隐式转换:
double percent = (numPass * 1.0) / (numPass + numFail);
这种古老的技术好的地方是,它是独立于语言的,但不好的是要多做一些额外的运算。