关闭

API测试(六)

发表于:2009-10-15 14:36

字体: | 上一篇 | 下一篇 | 我要投稿

 作者:James D. McCaffrey    来源:.NET软件测试自动化之道

  问题

  如何验证待测程序的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.
  }

相关阅读:

API测试(五)

API测试(四)

API 测试(三)

API 测试(二)

API 测试(一)

22/2<12
《2023软件测试行业现状调查报告》独家发布~

关注51Testing

联系我们

快捷面板 站点地图 联系我们 广告服务 关于我们 站长统计 发展历程

法律顾问:上海兰迪律师事务所 项棋律师
版权所有 上海博为峰软件技术股份有限公司 Copyright©51testing.com 2003-2024
投诉及意见反馈:webmaster@51testing.com; 业务联系:service@51testing.com 021-64471599-8017

沪ICP备05003035号

沪公网安备 31010102002173号