关于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); } }