junit测试延伸--私有方法测试

时间:2021-11-15 19:29:06

关于junit测试的延伸,这里有类概念级别的测试,继承类的测试,接口的测试,抽象类的测试,关于这些类级别的测试,这里我就不做多的赘述了。

关于上面的几个测试就是说,我们不应该单纯的去测试类中的一些方法,而且要测试类的状态,也就是那些属性状态。我个人觉得没太大必要,实际编码测试中我们直接测试方法的正确性就够了,一个类的状态是通过方法来改变的,

所以正确的初始化后基本不会有太大问题。这里我要整理的是一个类中私有方法的测试。

很多人说类的私有方法不用测试,理由是类私有方法只允许被本类访问,而其他类无权调用。事实上并非如此。我们在写一个类的时候经常会封装一些私有方法,然后只能在自己的类中使用。但是用private修饰的私有方法在外部类不能

被访问,那么假如我们想测试,那怎么办呢? 简单,利用反射绕开Java的语言访问检查。

这里我举个例子:

package org.linkinpark.junit.testjunit;

/**
 * @创建作者: LinkinPark
 * @创建时间: 2016年2月5日
 * @功能描述: 写一个测试源码,然后里面封装一个私有方法
 */
public class Linkin
{
	private String test(String str)
	{
		return str + "。。。";
	}

}

OK,现在我们来写上面这个私有方法的测试类:

package org.linkinpark.junit.testjunit;

import java.lang.reflect.Method;

import org.junit.Assert;
import org.junit.Test;

public class TestTest
{

	@Test
	public void test() throws Exception
	{
		Linkin test = new Linkin();
		Class<Linkin> clazz = Linkin.class;
		Method declaredMethod = clazz.getDeclaredMethod("test", String.class);
		declaredMethod.setAccessible(true);
		Object invoke = declaredMethod.invoke(test, "LinkinPark");
		declaredMethod.setAccessible(false);
		Assert.assertEquals("LinkinPark。。。", invoke);
	}

}


我们运行上面的测试,来看下junit绿条情况。OK,测试通过,没问题。

junit测试延伸--私有方法测试