欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

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);// 测试
			}
		}
	}
}

测试结果:

junit测试private方法
            
    
    博客分类: 单元测试 java单元测试junit测试private方法 

 

文章来源:http://blog.csdn.net/believefym/article/details/2302008

  • junit测试private方法
            
    
    博客分类: 单元测试 java单元测试junit测试private方法 
  • 大小: 18.2 KB