Unit Testing 單元測試
單元測試一般是程序員編寫,用來測試特定的方法是否正常運行的小段代碼程序。《Head First Java》中講到過,在編寫實現實際功能的代碼前就編寫好單元測試代碼是一個很好的習慣,試問很多時候當你寫完了一個認爲功能代碼後還會特意去寫一段測試代碼進行測試嗎,估計很多時候就會跳過這步。 編寫好單元測試代碼不僅僅在完成功能代碼時用到,當你修改了功能代碼後,你可以立即使用寫好的單元測試代碼進行測試以保證修改後的代碼對之前的功能沒有影響。
Unit Testing with JUnit 使用JUnit進行單元測試
JUnit 4.x 使用標註的方法標註了哪些類的方法有對應的單元測試代碼,JUnit 假設所有需要測試的方法可以以任意順序進行測試。因此,當前測試不能依賴於其他測試代碼。 使用JUnit進行測試步驟:
-
將需要測試的方法使用 @org.JUnit.Test進行標註
-
使用JUnit提供的方法檢查比較期待得到的結果與實際運行後的結果
可以使用像Eclipse這樣的工具或者直接使用類"org.junit.runner.JUnitCore" 進行測試。
Installation of JUnit JUnit的安裝使用
從 JUnit website 下載JUnit4.x.jar 。 下載中包括JUnit 類庫 "junit-4.*.jar" 。將這個類庫加入到你的JAVA工程中,並且加入到classpath中()。在Eclipse中通過編輯Build Path進行加入操作。
JUnit with Eclipse / Eclipse中使用Junit
準備
創建一個新的工程"de.vogella.junit.first"。我們會將單元測試代碼放入單獨的文件夾中,因此再新建一個源碼文件夾“test” ,通過在工程上單擊右鍵,點擊properties,然後選擇左側菜單中的“java build path”,並點擊右側的Source標籤。
點擊"Add folder" ,然後再天出窗口中點擊"Create new folder"來創建一個“test”文件夾。
爲測試代碼創建一個單獨的文件夾並不是強制必須要做的。但是建議最好將測試代碼與正常代碼分開存放。
Create a Java class / 創建JAVA類
創建“de.vogella.junit.first”包,以及下面的類:
package de.vogella.junit.first;
public class MyClass {
public int multiply(int x, int y) {
return x / y;
}
}
Create a JUnit test / 創建JUnit測試
選擇你新建的那個類,右鍵單擊->New->JUnit Test case ,更改源文件夾到JUnit的文件夾。選擇“New JUnit 4 test”,並且確認你將原文件夾更改爲了test。
點擊next並且選擇你想要進行測試的方法。
如果你沒將JUnit加入你的classpath,Eclipse會提示你是否將其加入classpath中。
創建如下的測試代碼:
package de.vogella.junit.first;
import org.junit.Test;
import static org.junit.Assert.assertEquals;
public class MyClassTest {
@Test
public void testMultiply() {
MyClass tester = new MyClass();
assertEquals("Result", 50, tester.multiply(10, 5));
}
}
Run your test via Eclipse / 在Eclipse中執行測試
右鍵單擊你新建的測試類,選擇Run-As-> Junit Test
我們執行後應該得到一個失敗的結果(從紅色的進度條可以看出)。因爲我們的multiplier類現在沒有正確的運行(類中使用除號代替了乘號)。修改這個bug後重新執行測試,將會得到一個綠色的通過提示。
如果你有一些個測試,你可以將它們放入test suite合併執行。Test suite中的所有測試類將會在運行test suite的時候一併執行。創建一個新的test suite你可以多選需要加入test suite的測試類,並在其上單擊右鍵,選擇New-> Other -> JUnit -Test Suite 。
注意:這種新建Test Suite的方法對於基於JUnit4.x的Test Case會出現下圖找不到測試類的情況。(我使用的是MyEclipse6.0,其他的版本未做測試)
P.S. 參考了這篇文章 http://www-01.ibm.com/support/docview.wss?uid=swg21363984 對於解決這個問題的方法,我們可以新建一個空的 test suite,然後手工編輯需要加入test suite的test case。
按如下方法更改test suite的代碼來正確運行你的test case ,如果你開發了一些其他的test case需要一併進行測試, 你可以將它加入到@Suite.SuiteClasses 中。
package mypackage;
import org.junit.runner.RunWith;
import org.junit.runners.Suite;
@RunWith(Suite.class)
@Suite.SuiteClasses( { MyClassTest.class })
public class AllTests {
}
用你自己的代碼來執行測試
除了上邊的方法,你當然也可以自己編寫代碼來靈活的進行測試,"org.junit.runner.JUnitCore"這個類提供了 runClasses()這個方法,可以用來運行一個或多個測試類。這個方法會返回一個"org.junit.runner.Result"類型的返回值對象,這個對象可以用來檢索測試失敗的相關的信息。
在“test”文件夾下創建一個新的類“MyTestRunner”,代碼如下:(這個類會執行你的測試類並在控制檯輸出測試失敗的相關信息)
package de.vogella.junit.first;
import org.junit.runner.JUnitCore;
import org.junit.runner.Result;
import org.junit.runner.notification.Failure;
public class MyTestRunner {
public static void main(String[] args) {
Result result = JUnitCore.runClasses(MyClassTest.class);
for (Failure failure : result.getFailures()) {
System.out.println(failure.toString());
}
}
}
更詳細的關於標記和靜態引用的相關信息可以參見百度的這個文檔:http://wenku.baidu.com/view/7fffb323aaea998fcc220e21.html
原文地址:http://www.vogella.de/articles/JUnit/article.html
文章後關於標記和靜態引用方法的信息未進行翻譯,可以查閱上述百度文檔,文章經過少許編輯,添加了個人經過測試的一些說明。