JUnit 3.8 通过反射测试私有方法
测试私有(private)的方法有两种:
1)把目标类的私有方法(修饰符:private)修改为(public),不推荐,因为修改了源程序不佳
2)通过反射 (推荐)
代码演示:
目标程序
PrivateMethod.java
- package com.junit3_8;
- public class PrivateMethod {
- //私有方法
- private int add(int a, int b)
- {
- return a +b ;
- }
- }
测试程序
PrivateMethodTest.java
- package com.junit3_8;
- import java.lang.reflect.Method;
- import junit.framework.Assert;
- import junit.framework.TestCase;
- /**
- * 通过反射测试私有方法,
- *
- */
- public class PrivateMethodTest extends TestCase {
- public void testAdd() throws Exception
- {
- //PrivateMethod pm = new PrivateMethod();
- //获取目标类的class对象
- Class<PrivateMethod> class1 = PrivateMethod.class;
- //获取目标类的实例
- Object instance = class1.newInstance();
- //getDeclaredMethod() 可获取 公共、保护、默认(包)访问和私有方法,但不包括继承的方法。
- //getMethod() 只可获取公共的方法
- Method method = class1.getDeclaredMethod("add", new Class[]{int.class,int.class});
- //值为true时 反射的对象在使用时 应让一切已有的访问权限取消
- method.setAccessible(true);
- Object result = method.invoke(instance, new Object[]{1,2});
- Assert.assertEquals(3, result);
- }
- }
小结:
getDeclaredMethod() 可获取 公共、保护、默认(包)访问和私有方法,但不包括继承的方法。 getMethod() 只可获取公共的方法
Method method = class1.getDeclaredMethod("add", new Class[]{int.class,int.class});
等价于
Method method = class1.getDeclaredMethod("add", new Class[]{Integer.TYPE,int.Integer.TYPE});
因为 Integer.TYPE 表示基本类型 int 的 Class 实例
JUnit 3.8 通过反射测试私有方法的更多相关文章
- [bug]spring项目通过反射测试私有方法时,注入对象异常
背景 遇到问题:在进行Spring单元测试编写时,发现被测方法是一个私有方法,无法直接通过注入对象调用 解决思路:首先想到通过反射获取该私有方法的访问权限,并传入注入对象,最终调用对象的私有方法. 出 ...
- 无所不能的PowerMock,mock私有方法,静态方法,测试私有方法,final类
1.为什么要用mock 我的一本书的解释: (1)创建所需的DB数据可能需要很长时间,如:调用别的接口,模拟很多数据 (2)调用第三方API接口,测试很慢, (3)编写满足所有外部依赖的测试可能很复杂 ...
- java中用反射访问私有方法和私有成员[转]
转自: http://zhouyangchenrui.iteye.com/blog/470521 java的反射可以绕过访问权限,访问到类的私有方法和成员.可能这点会引起安全性的讨论.反射的使用帮助解 ...
- Java 反射获取私有方法
通常我们创建一个类时,它的私有方法在类外是不可见的,但是可以通过反射机制来获取调用.具体的反射机制的介绍大家自己百度. 所以反射可能会破坏我们的单例模式,当然解决方案也是有的,就是做个标记记录次数,第 ...
- c# 通过反射获取私有方法
class Program { static void Main(string[] args) { //通过反射来调私有的成员 Type type = typeof(Person); //Bindin ...
- Java开发笔记(八十)利用反射技术操作私有方法
前面介绍了如何利用反射技术读写私有属性,不单是私有属性,就连私有方法也能通过反射技术来调用.为了演示反射的逆天功能,首先给Chicken鸡类增加下列几个私有方法,简单起见弄来了set***/get** ...
- 使用PowerMockito和Mockito进行模拟测试,包括静态方法测试,私有方法测试等,以及方法执行的坑或者模拟不成功解决
依赖:这个很重要,不同版本用法也有点区别: <dependency> <groupId>org.mockito</groupId> <artifactId&g ...
- java反射调用私有方法和修改私有属性
//调用私有方法package com.java.test; public class PrivateMethod { private String sayHello(String name) { r ...
- junit单元测试中私有方法测试
1.单元测试可以对系统逻辑进行每个单元模块的测试. 2.单元测试也可以作为回归测试的依据,可以避免升级完善功能时引入问题. 3.单元测试要求将代码写的更清晰,更易于测试. 4.有时单元测试需要测试私有 ...
随机推荐
- [BZOJ4408&&BZOJ4299][FJOI2016 && Codechef]神秘数&&FRBSUM(主席树)
4299: Codechef FRBSUM Time Limit: 10 Sec Memory Limit: 128 MBSubmit: 550 Solved: 351[Submit][Statu ...
- 【tarjan】BZOJ2140-稳定婚姻
又名NTR的故事 [题目大意] n对夫妻Bi和Gi.若某男Bi与某女Gj曾经交往过,他们有私奔的可能性.不妨设Bi和Gj旧情复燃,进而Bj会联系上了他的初恋情人Gk,以此递推.若在Bi和Gi离婚的前提 ...
- python3-开发进阶Flask的基础(5)
内容概要: SQLAlchemy flsak-sqlalchemy flask-script flask-migrate Flask的目录结构 一.SQLAlchemy 1.概述 SQLAlchemy ...
- JDBC中使用Preparement对象修改个人多账户密码
在日常生活中,人们可能会遇到想同时修改自己所有账户的密码,这个时候再用批量处理已经不好使了,因为我们要处理的是某个人的多个账户,而不是所有人的,那么怎么才能实现呢?经过大量的测试,我写了一个单元测试代 ...
- Codeforces Round #301 (Div. 2) B. School Marks 构造/贪心
B. School Marks Time Limit: 1 Sec Memory Limit: 256 MB 题目连接 http://codeforces.com/contest/540/probl ...
- flex弹性盒子
注意事项 1.设为Flex布局之后,子元素的float,clear和vertical-align属性都讲失效 2.采用Flex布局的元素,称为Flex容器(Flex container),所有的子元素 ...
- FreeRTOS Customisation -- FreeRTOSConfig.h
http://www.freertos.org/a00110.html FreeRTOS is customised using a configuration file called FreeRTO ...
- springmvc 配置和spring配置?
最近在接触mybatis,之间使用springmvc时,配置文件一直是,web.xml+XX-servlet.xml 的配置(xx为web.xml中servlet name名称).为了整合mybati ...
- redis.conf配置解释
daemonize:如果需要在后台运行,把该项改为yespidfile:配置多个pid的地址,默认在/var/run/redis.pidbind:绑定ip,设置后只接受来自该ip的请求port:监听端 ...
- SRM 212 Div II Level One: YahtzeeScore
题目来源:http://community.topcoder.com/stat?c=problem_statement&pm=1692&rd=5858 比较简单. 代码如下: #inc ...