junit测试private方法
程序员文章站
2022-07-13 10:31:18
...
测试private methods
Junit FAQ
How do I test private methods?
Testing private methods may be an indication that those methods should be moved into another class to promote reusability.
But if you must...
If you are using JDK 1.3 or higher, you can use reflection to subvert the access control mechanism with the aid of the PrivilegedAccessor. For details on how to use it, read this article.
实例:
Unit3.java
package com.bijian.study; class Sup { public int data; } public class Unit3 extends Sup { private int data; public Unit3() { this(0); } public Unit3(int data) { this.data = data; } private int getData() { return this.data; } private int getData2(int i) { // with paramater return this.data + i; } }
测试类Unit3Test.java:
package com.bijian.study; import org.junit.*; import java.lang.reflect.*; public class Unit3Test { private Unit3 c = new Unit3(10); private final Method methods[] = Unit3.class.getDeclaredMethods(); @Test public void testGetData() throws Exception { for (int i = 0; i < methods.length; ++i) { if (methods[i].getName().equals("getData")) { methods[i].setAccessible(true); Object o = methods[i].invoke(c); Assert.assertEquals(new Integer(10), o); } } } @Test public void testGetData2() throws Exception { for (int i = 0; i < methods.length; ++i) { if (methods[i].getName().equals("getData2")) {// 找到要测试的private method methods[i].setAccessible(true); // 设置可以访问 Object para[] = { 123 }; // 参数列表 Object o = methods[i].invoke(c, para); // 相当于c.privateMethod(para) Assert.assertEquals(new Integer(10 + 123), o);// 测试 } } } }
测试结果:
文章来源:http://blog.csdn.net/believefym/article/details/2302008
上一篇: socket 连接复位情况
下一篇: 探索JUnit4扩展:使用Theory