2021-10-10 开发者测试经验总结

本文总结了提高软件测试效率和覆盖率的多种方法,包括理解比赛策略、注重题意、从简单类开始测试、善用快捷键、处理异常测试、设置超时限制、利用辅助工具、测试抽象类、阅读代码帮助、巩固基础、复用测试代码、循环测试、反射调用私有方法、掌握泛型和参数化测试。这些技巧对于提升测试质量和速度至关重要。
摘要由CSDN通过智能技术生成

目录

经验总结

1.比赛策略

2.看清楚题目

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

4.快捷键的使用

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

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

7.合理运用辅助工具

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

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

10. 打好基础

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

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

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

14.掌握泛型的使用


欢迎访问我的免费课程

软件测试与质量保证 (xueyinonline.com)​编辑https://www.xueyinonline.com/detail/219145327icon-default.png?t=N6B9https://www.xueyinonline.com/detail/219145327

经验总结

1.比赛策略

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

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

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

2.看清楚题目

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

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

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

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

4.快捷键的使用

1)eclipse增加联想

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

3)

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

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

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

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

    @Test
    public void test5() {
        try {

         // 这样子就不用太多时间考虑异常类型,至少程序不崩溃

       test  code  writer here
        } catch (Exception e) {
//            e.printStackTrace();   //测试时可让最新的那个用例的改句打开,以了解代码的异常路径
        }
    }

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

7.合理运用辅助工具

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

cfg插件

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

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

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

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

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

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

10. 打好基础

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

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

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

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

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

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

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

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

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

//被测试方法为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());
		}

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)

。。。。

此时,再

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

曹红杏

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值