關於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); } }