API 测试(11)

问题

 

      如何验证待测程序的API方法能否正确地处理传给它的null参数

 

设计

 

      使用一个特殊的字符串标记来表示测试用例数据文件里的null值。在测试套件里添加相应的处理逻辑,把null标记转换成null输入值。

 

方案

 

      修改最初的待测方法ArithmeticMean(),以处理null输入:

 

public static double ArithmeticMean(params int[] vals)

{

      if(vals == null) return 0.0;//修正

      double sum = 0.0;

      foreach(int v int vals)

            sum += v;

      return (double)(sun/vals.Length);

}//ArithmeticMean

 

可以像下面这样把null标记加入测试用例数据:

 

0001:ArithmeticMean:2 4 8:4.6667

0002:ArithmeticMean:NULL:0.0000

 

然后像下面这样处理这个标记:

 

string line,caseID,method;

string[] tokens,tempInput;

int[] input = null;

double expected,actual;

 

while ((line = sr.ReadLine()) != null)

{

      tokens = line.Split(':');

      caseID = tokens[0];

      method = tokens[1];

 

      if(tokens[2] == "NULL") //输入为null

            input = null;

      else

      {

            tempInput = tokens[2].Split(' ');

            input = new int[tempInput.Length];

            for(int i = 0;i < input.Length; ++i)

                  input[i] = int.Parse(tempInput[i]);

      }

     

      expected = double.Parse(tokens[3]);

     

      actual = MathLib.Methods.ArithmeticMean(input);

 

      if(actual == expected)

             Console.WriteLine(caseID + " Pass");

      else

             Console.WriteLine(caseID + " *FAIL*");

}//while

 

注解

 

      针对输入参数为null的情况,对API方法进行测试是非常重要的。由于我们没有办法在测试用例数据文件里直接存储一个null值,所以我们使用字符串标记"NULL"。用"NULL"来表示null值并不是什么严格的规定,但这么做较之使用"nil"或者"invalid"可以使测试用例数据和测试代码更容易被读懂。当我们在阅读或者解析一个测试用例的时候,如果检测到字符串“NULL”,就转到测试套件中处理特殊情况的逻辑分支。到底采用什么样的处理逻辑取决于待测方法的行为。

 

      请注意:在声明input变量的时候,给它赋的初值是null:

 

      int[] input = null;

 

      如果在测试用例文件中读到了"NULL",就再给它赋一次null值:

      if(tokens[2] == null)

            input = null;

 

      从技术上说这并不是必须的,但这么做可以让代码更容易被读懂并且易于修改。处理期望结果为null的情况与处理输入参数为null的情况,其思想是一样的。设想有一个名为Hypergeometric()的新方法添加到了MathLib库并接受测试,如果Hypergemetic()方法的输入参数全为0,那么这个方法返回一个null值。要测试这种情况,就可以在测试用例文件里存储一个"NULL"字符串标记:

 

0001:Hypergemetic:0 0 0 0:NULL:

0002:Hypergemetic:1 3 5 7:2 4:

 

然后在测试套件里加上如下逻辑处理代码:

 

object expected = null;

 

while ((line = sr.ReadLine()) != null)

{

      if(tokens[3] == "NULL")

            expected = null;

      else

            //此处把tokens[3]解析成期望对象

 

            //etc.

}

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值