API 测试(11)
2009-10-12 15:52
141 查看
问题
如何验证待测程序的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方法能否正确地处理传给它的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.
}
相关文章推荐
- Loadrunner 11 测试API java Vuser 模拟Post,Get 请求实例
- 通过loadrunner 11常规通用的C语言API类型的Vuser 方式,测试验证MySQL数据库插入、查询、修改、删除数据性能脚本实例
- S3-客户端API测试
- (待解决)android:actionBarStyle requires API level 11
- JAVA白盒安全测试需要关注的API
- ERROR:Application requires API version 12.Device API version is 11 (Android 3.0).
- Android 2.2 r1 API 中文文档系列(11) —— RadioButton
- mybatis一对一的三种实现方式 数据准备: 使用mysql数据库作为测试。建表语句及测试数据: CREATE TABLE `classes` ( `class_id` int(11) NOT
- Spring Boot REST API 自动化测试
- WebApi接口测试工具:WebApiTestClient
- 对硬盘操作的API介绍以及应用测试
- 调用getActionBar()总会报Call requires API level 11 (current min is 8): android.app.Activity#getActionBar
- android中gridview中方法getNumColumns()方法在api 11之前不兼容问题
- JPA 学习篇(四)Query接口下的 API 测试
- Android Studio 出现call requires api level 11 (current min is 2)解决方法
- QUnit在浏览器扩展API测试中的应用
- Android Call requires API level 11 (current min is 8)的解决方案
- seleniumWebDriver的API高级应用Log4j打印执行日志11_2
- API 测试 (5)
- 【转】调用getActionBar()报Call requires API level 11 (current min is 8): android.app.Activity#getActionBar