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,測試通過,沒問題。




免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM