主要是配合Refactoring跟TDD(測試驅動)、XP(極限編程)等
單元測試可以測試程式碼,有人主張每個class都該有自己的測試碼
官網:http://www.junit.org/
今天會想做這個測試,是因為在看Refactoring的時候意外發現Java的protected修飾子
可以讓member依然在非同個繼承體系下使用
public class TestProtect extends TestCase {
public TestProtect(String test){
super(test);
}
public void testProtect() {
Parent parent=new Parent();
Children child=parent.createChildren();
assertNotNull("OK", child);
}
public static void main(String[] args) {
junit.textui.TestRunner.run(TestProtect.class);
}
}
class Parent {
public Parent() {
}
public Children createChildren(){
return new Children();
}
}
class Children extends Parent {
protected Children() {
}
protected String say() {
return "I am Children";
}
}
使用JUnit得時候要讓想測試的class去繼承Testcase
然後必須有兩個主要的東西要寫:testMethod跟帶一個String參數的建構子 TestProtect(String test)
並且他們都必須是public,這樣Testcase才能運作
至於那段
public static void main(String[] args) {
junit.textui.TestRunner.run(TestProtect.class);
}
是可以可選的,只是為了讓測試更有彈性的一段程程式,就算拿掉也是可以RUN
Testcase會去尋找以test開頭的函式,像是testProtect來做測試
測試程式碼是自己餵一些資料然後看程式是否正常運作
順便附上JUnit跑的畫面,人家常常在說軟體的綠棒紅棒還是綠燈紅燈的
就是測試的通過
第一張圖片,我有兩個測試的testMethod,主要測試物件是否為null是否話就會RUN不過變成紅棒
我的testProtect2因為是放個null所以run不過,並且他幫我清楚標出是哪個測試函式沒過試驗
第二張圖片,由於我把testProtect2改成一個有instance的object所以他變成綠棒
這邊只是個簡單的實驗,,並沒有真的做什麼測試
參考資料:JUnit學習筆記
之前所學的protected主要是讓自己的subclass可以叫用superclass的member,但是java很特殊,以protected修飾的member,就算不是同一個繼承體系,同個package之下的其他class仍然可以使用他。
這點不若C++還是C#等語言的嚴謹,必須一定得subclass才能使用
下面附上java的 access level table
Modifier | Class | Package | Subclass | World |
---|---|---|---|---|
public | Y | Y | Y | Y |
rotected | Y | Y | Y | N |
no modifier | Y | Y | N | N |
private | Y | N | N | N |
參考資料:http://java.sun.com/docs/books/tutorial/java/javaOO/accesscontrol.html
沒有留言:
張貼留言