目录

经验总结

1.比赛策略

2.看清楚题目

3.建议从简单的 基础类开始测试

4.快捷键的使用

5.测试用例如果抛出异常的。建议@Test使用expected参数。可以增加变异测试得分

6.建议测试用例增加超时时间限制。防止某个用例卡死

7.合理运用辅助工具

8.抽象类的方法如何测试

9 仔细阅读代码的帮助,会给你很多启发

10. 打好基础

11. 相似类的测试代码相似

12 通过循环增加测试覆盖率

13 使用反射来访问私有方法

14.掌握泛型的使用

经验总结

1.比赛策略

不必准求完美,几个小时的时间,目标是尽可能提高覆盖率,不追求100%

好比地上掉了很多钱,马上要刮大风了,请问你怎么捡? 捡大钱是一个比较不错的策略。

不要卡在一个地方,先做灰的,毕竟时间很有限。

2.看清楚题目

确定到底是语句覆盖(statement cover) 还是 判定覆盖(brance cover)

要求不同,测试用例编写的量不一样

3.建议从简单的 基础类开始测试

找到继承关系可以方便你在用某个类的实例时,快速的从对应的用例中拷贝过来

android检测开发者模式开关 开发者测试_开发者

4.快捷键的使用

1)eclipse增加联想

2)// ctrl+2  L 可以快速为表达式补充等号及左侧的变量定义部分,这可以提高编码速度。

3)

5.测试用例如果抛出异常的。建议@Test使用expected参数。可以增加变异测试得分

android检测开发者模式开关 开发者测试_开发者_02

 为了较容易通过可以将异常类设置为 Exception.class

如果实在有困难。可以采用 try  catch

因为那样可能会由于不抛出异常而failure

@Test
     public void test5() {
         try {         // 这样子就不用太多时间考虑异常类型,至少程序不崩溃
       test  code  writer here
         } catch (Exception e) {
 //            e.printStackTrace();   //测试时可让最新的那个用例的改句打开,以了解代码的异常路径
         }
     }

6.建议测试用例增加超时时间限制。防止某个用例卡死

android检测开发者模式开关 开发者测试_全国大学生软件测试_03

7.合理运用辅助工具

 例如,安装覆盖率插件,可以随时了解目前源代码覆盖情况,哪些地方未覆盖

cfg插件、

借助sourceinsight超找类、调用关系等

8.抽象类的方法如何测试

1)如果子类未覆盖抽象父类的方法,那么直接通过具体子类的实例调用父类的方法。

2)如果子类已经覆盖了抽象父类的方法,导致父类方法无法被调用,可以自己定义具体子类继承和实现抽象父类,从而在自己定义的类中写方法来调用父类的方法

9 仔细阅读代码的帮助,会给你很多启发

代码中有一些范例,帮助你快速理解代码

10. 打好基础

java大一的基础课再好好复习下

建议把抽象类、类的继承、函数重写、输入输出流、数组、列表等看看

11. 相似类的测试代码相似

有些类结构相似,可能只是类型不同,这时可以考虑将用例复制过来,批量替换类型

具体还要自己衡量那个效率高,是自己重写,还是修改

12 通过循环增加测试覆盖率

程序运行的快,通过循环可以测试多个数,从而提高覆盖率,

13 使用反射来访问私有方法

被测程序的类的私有成员函数无法直接调用,可以通过反射的方式获取方法,修改方法的可访问性,然后再调用方法。

android检测开发者模式开关 开发者测试_全国大学生软件测试_04

//被测试方法为private方法。私有方法不能通过对象条用,无法直接测试
public class DFSCodeTraveler {
....
 private void dfsSearch(Stack<Integer> stack, int currentPosition, int next) {
}
....
}
try {
			Stack<Integer> mystack = new Stack<Integer>();
			mystack.push(0);
			mystack.push(1);
			Class<DFSCodeTraveler> dfsclass1 = DFSCodeTraveler.class;//得到被测类
//			public Method getDeclaredMethod(String name, 
//			                                 Class<?>... parameterTypes)throws NoSuchMethodException,  SecurityException
//          该方法将类中符合指定方法名称、指定方法参数的方法返回,函数的参数含义如下
//          参数:name - 方法名
//          parameterTypes - 方法的参数类型列表
			Method method = dfsclass1.getDeclaredMethod("dfsSearch",
					new Class[] { mystack.getClass(), int.class, int.class });
			System.out.println(method.toString()); //此处只是打印卡线函数是否正确
			method.setAccessible(true);           //修改方法为可范根
			method.invoke(dfs2, mystack, 0, 0);   //调用该方法  第一个参数为类的对象,后面的参数都是这个私有方法需要的参数
		} catch (Exception e) {
			System.out.println(e.toString());
		}

android检测开发者模式开关 开发者测试_全国大学生软件测试_05

14.掌握泛型的使用

15. 参数化

参数化测试允许开发人员使用不同的值反复运行同一个测试。按照5 个步骤来创建参数化测试

1)用 @RunWith(Parameterized.class) 来注释 test 类。

2)创建一个由 @Parameters 注释的公共的静态方法,它返回一个对象的集合(数组)来作为测试数据集合。

3)创建一个公共的构造函数,它接受和一行测试数据相等同的东西。

4)为每一列测试数据创建一个实例变量。

5)用实例变量作为测试数据的来源来创建你的测试用例。

15. 建议更新maven依赖

本地执行测试程序时,可能提示

java.lang.NoClassDefFoundError: Lcom_atlassian_clover/TestNameSniffer;

at java.lang.Class.getDeclaredFields0(Native Method)

at java.lang.Class.privateGetDeclaredFields(Class.java:2583)

。。。。

此时,再

android检测开发者模式开关 开发者测试_android检测开发者模式开关_06