快捷键

修改快捷键 window-》preference-》general-》keys:
查找引用:ctrl+shift+g
覆盖测试:alt+shift+E,T
复制一行:ctrl+alt+down
调试运行:alt+shift+D,T
改为:
查找引用:ctrl+g
覆盖测试:ctrl+W
复制一行:ctrl+d
调试运行:ctrl+q

概念

变异(数字、返回值、errMsg)
循环用例(BinarySearchTree test2)
容易出现变异的地方(自定义异常)
多个测试用例
用反射(复制对比,Datalog hasCode)
我的测试步骤(代码最多、私有函数)
使用eclipse代码模板
半自动化测试:生成随机数据、记录随机数据来跑分支,记录对应的结果来断言

bug检测率

  针对特定的应用场景,写好了测试用例,运行测试用例,发现程序的行为和测试用例中预期的不一致,则称这个程序出bug了。

  行为不一致的具体表现为:返回值、运算符、条件判断、数值(引用、数字、字符串变化)等。这些在项目升级或者完善的时候容易出现,这时,测试用例就派上用场了,能用于检测升级后是否出现了bug。

  如何检测测试用例的有效性呢?主要指标是分支(语句)覆盖率和bug检测率。以上可见,bug出现在项目升级或者完善时,改动而来的变化,但在实际应用中不可能等到项目升级了才来检测用例是否有效,有工具可以来模拟这些变化,这些变化则称之为“变异”,将程序输入,进行变异后,输出多份代码。每份代码都认为出现了bug,因为里面的部分代码被工具改动了,即和原来的项目代码表现不一致了。用这些变异后的代码运行测试用例,要求测试用例运行失败,这样才算是检测出bug了,否则都通过的话,则没检测出bug。

插件

覆盖率插件:eclemma
变异插件:http://muclipse.sourceforge.net/site/site.xml
https://sourceforge.net/projects/muclipse/?source=typ_redirect

反射例子

package refExample;

import java.lang.reflect.Field;
import java.lang.reflect.Method; public class Main {
public static void main(String[] args) throws Exception{ Class clazz = A.class; { //调用有参静态方法
Method f1 = clazz.getDeclaredMethod("f2", new Class[]{int.class});
f1.setAccessible(true);
f1.invoke(null, 123);
}
{ //调用无参静态方法
Method f1 = clazz.getDeclaredMethod("f2", null);
f1.setAccessible(true);
f1.invoke(null, null);
}
{ //设置静态属性
Field field = clazz.getDeclaredField("aa");
field.setAccessible(true);
field.set(null, 7); Method f1 = clazz.getDeclaredMethod("f1",null);
f1.setAccessible(true);
f1.invoke(null, null);
}
{ //设置成员属性
A a = (A) clazz.newInstance();
Field field = clazz.getDeclaredField("a");
field.setAccessible(true);
field.set(a, 99); Method f1 = clazz.getDeclaredMethod("f3",null);
f1.setAccessible(true);
f1.invoke(a, null);
}
} }
class A{
private static int aa;
private static void f1(){
System.out.println(aa);
}
private static void f2(int a){
System.out.println(a);
}
private static void f2(){
System.out.println("no p 2 ");
} private int a;
private void f3(){
System.out.println(a);
}
}

最新文章

  1. 在centos7上安装ClamAV杀毒,并杀毒(centos随机英文10字母)成功
  2. 记一次Linux服务器上查杀木马经历
  3. WPF 程序启动显示为通知区域的图标方法
  4. Poj(2784),二进制枚举最小生成树
  5. centos7 使用 omnibus包安装方式,安装 gitlab7.4
  6. 如何获得bin/Debug目录的路径?
  7. Android-Java第一课 内部类 (inner Class)
  8. Neutron LBaaS Service(2)—— Neutron Services Insertion Model
  9. 移动端App混合开发问题 汇总
  10. Google Chrome 默认非安全端口列表
  11. 如何做一个导航栏————浮动跟伪类(hover)事件的应用
  12. 使用.NET Core在RESTful API中进行路由操作
  13. 腾讯广告联盟 Android SDK(广点通)demo的使用方式
  14. Appium自动化学习1
  15. 如何解决button,a,input标签自带蓝色边框
  16. Visual Studio 2017调试开源项目代码
  17. [转] Async/Await替代Promise的6个理由
  18. 在Linux服务器上配置Transmission来离线下载BT种子
  19. Redis入门到高可用(九)——有序集合zset
  20. numpy的ravel()和flatten()函数

热门文章

  1. JIRA中的标记语言的语法参考
  2. 给mysql默认root用户设置密码
  3. IDEA 快捷键MacOS
  4. 关于log
  5. NET4.5中的Task.Run及Task.Delay方法
  6. SpringBoot | 遇坑总结 | JPA
  7. [译]Understanding ECMAScript6 函数
  8. Python3 配置文件(configparser)(转载)
  9. kafka-->storm-->mongodb
  10. Android Studio 升级到3.0后出现编译错误\.gradle\caches\transforms-1\files-1.1\*****-release.aar