测试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

Logo

北京人形旗下天工造物具身智能开源社区,聚焦具身天工与慧思开物两大平台

更多推荐