使用Java的反射机制在软件测试中调用私有类及方法
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了使用Java的反射机制在软件测试中调用私有类及方法,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含3220字,纯文字阅读大概需要5分钟。
内容图文
![使用Java的反射机制在软件测试中调用私有类及方法](/upload/InfoBanner/zyjiaocheng/849/50dfbf315b854bfe89880e20b6e3289b.jpg)
使用Java的反射机制在软件测试中调用私有类及方法
??最近在做软件测试的题目,发现有的类的构造方法是私有的、有的类的某些方法是私有的,虽然可以通过巧妙的设计测试用例来覆盖到这些类和方法,但有没有更快的方法呢?哈哈,那就是利用Java的反射机制。
1、实例化 构造方法为私有类型 的 类
public class CSDN {
private int hahaha;
private String lalala;
//无参构造方法
private CSDN() {
}
//有参构造方法
private CSDN(int a, String lalala) {
this.hahaha = a;
this.lalala = lalala;
}
}
测试类的写法:
import static org.junit.Assert.*;
import java.lang.reflect.Constructor;
import java.lang.reflect.InvocationTargetException;
import org.junit.After;
import org.junit.Before;
import org.junit.Test;
public class CSDNTest {
//无参构造方法的调用
@Test
public void test() {
try {
Class csdnClass = CSDN.class;
Constructor csdnConstructor;
csdnConstructor = csdnClass.getConstructor();
csdnConstructor.setAccessible(true);
CSDN csdn = (CSDN)csdnConstructor.newInstance();
} catch (NoSuchMethodException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (SecurityException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (InstantiationException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IllegalAccessException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IllegalArgumentException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (InvocationTargetException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
//有参构造方法的调用
@Test
public void test2() {
try {
Class csdnClass = CSDN.class;
Constructor csdnConstructor;
csdnConstructor = csdnClass.getConstructor();
csdnConstructor.setAccessible(true);
CSDN csdn = (CSDN)csdnConstructor.newInstance(new Object[]{7, "String value"});
} catch (NoSuchMethodException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (SecurityException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (InstantiationException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IllegalAccessException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IllegalArgumentException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (InvocationTargetException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
2、调用私有方法
public class CSDN {
private void printValue(int a, String b) {
System.out.println(a + ", " + b);
}
}
测试类的写法:
import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method;
import org.junit.Test;
public class CSDNTest {
//无参构造方法的调用
@Test
public void test() {
CSDN csdn = new CSDN();
Method printValue;
try {
printValue = CSDN.class.getDeclaredMethod("printValue", int.class, String.class);
printValue.setAccessible(true);
printValue.invoke(7, "调用私有方法");
} catch (NoSuchMethodException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (SecurityException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IllegalAccessException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IllegalArgumentException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (InvocationTargetException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
内容总结
以上是互联网集市为您收集整理的使用Java的反射机制在软件测试中调用私有类及方法全部内容,希望文章能够帮你解决使用Java的反射机制在软件测试中调用私有类及方法所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。