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

关于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测试延伸--私有方法测试



上一篇:使用taskset命令来限制进程的CPU


下一篇:Science14年的聚类论文——Clustering by fast search and find of density peaks