JMockit的中文資訊也非常少,記錄一些自己的經驗與想法,分享給後進,JMockit是甚麽?如果你有在寫單元測試,一定會覺得寫測試的替身(這邊相關手法統稱mock),非常麻煩,為了測試一個物件不同分支,要寫很多的替身。甚至沒有依賴注入的方式與介面更是難以達到mock的效果,這些問題都會讓寫單元測試既痛苦又麻煩,而JMockit這一類的mock工具,就是用來解決這樣的問題,讓寫測試變成一件快樂的事,這類的工具簡直就像是吃了手術果實的羅喊出ROOM後,就能夠隨心所欲地進行替換。
我為什麼選擇JMockit?
其實Java疑似Mockito比較多人使用,但因我比較喜歡自虐嘗試不同的技術,況且JMockit官網的各套工具比較表看起來很威,最重要的是JMockit支援需要反射的功能,Mockito還要配合其他套,在我心中JMockit = 黑魔法,Mockito = 白魔法,Mockito的相關資源比較多,如果是新手建議使用這套,不過我自己用JMockit其實也沒到甚麼大問題,該有的資訊官網都有就是。
這邊可以看到第28行開始的地方,直接改變了Dependency的行為,但在第37行呼叫時,完全沒有注入依賴,Dependency就被替換掉了,是不是很方便呢?對測試有興趣的朋友歡迎一起討論,之後我也會陸續寫幾篇教學文,覺得有幫助就幫我多分享與按+1吧,看的人多也會增加我寫作的動力,感謝,如果都沒人看的話我就會富兼產出比較慢XD。
如果對測試有興趣想練習,請參考挑戰測試101
其實Java疑似Mockito比較多人使用,但因我比較喜歡
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
import org.testng.annotations.Test; | |
import mockit.Delegate; | |
import mockit.Expectations; | |
import mockit.Mocked; | |
/** | |
* Created by chris_jeng on 2016/1/12. | |
*/ | |
public class TTest { | |
class Client { | |
private Dependency dependency = new Dependency(); | |
public void doSomething() { | |
dependency.doSomething(); | |
} | |
} | |
class Dependency { | |
public void doSomething() { | |
System.out.println("Dependency doSomething"); | |
} | |
} | |
@Test | |
public void testMock(@Mocked final Dependency dependency) { | |
new Expectations() {{ | |
dependency.doSomething(); | |
result = new Delegate() { | |
void aDelegateMethod() { | |
System.out.println("Mcok doSomething"); | |
} | |
}; | |
}}; | |
new Client().doSomething(); | |
} | |
} |
這邊可以看到第28行開始的地方,直接改變了Dependency的行為,但在第37行呼叫時,完全沒有注入依賴,Dependency就被替換掉了,是不是很方便呢?對測試有興趣的朋友歡迎一起討論,之後我也會陸續寫幾篇教學文,覺得有幫助就幫我多分享與按+1吧,看的人多也會增加我寫作的動力,感謝,如果都沒人看的話我就會
如果對測試有興趣想練習,請參考挑戰測試101
留言
張貼留言
有什麼想法歡迎跟我們分享