浅谈Junit测试中反射和Jmock的应用
最近由于項目的需要,開發后的代碼強制編寫Junit測試,并且達到一定的coverage probility(主要應付客戶).所以,為了達到一定的覆蓋率,鄙人不得不在Case中大量使用反射(一般是針對private方法)和JMock(主要針對一些屬性方法)。
小編是做開發出身,由于對Spring的源代碼有過或多或少的了解,因此對反射技術也有一定的了解。故在使用反射進行Junit測試的過程中,還算是沒有遇到太多問題。小編認為,使用反射最重要的是要分清兩點: 一是要反射的實現類(記住,這里的對象類型必須是具體的實現類,而非接口);二就是要通過反射調用的方法(一般這里指的是private方法),這里需要注意方法重構的情況;對于鄙人來說,最頭疼的就剩下JMock方式了。
其實說來慚愧,小編接觸JMock還是在今年11月份,當時被發配到一個做純后臺的項目;當時就想JMock只是針對Junit測試的技術,對于我們開發人員來說沒有什么太大的關系,不用過多的了解。感覺哥們不用JMock一樣可以把Junit做好,一樣可以把覆蓋率提高;隨著單元測試進行,我慢慢發現:有些方法如果不使用JMock花費的時間和精力要遠遠比使用JMock多的多,由于項目趕時間,公司沒有過多的時間讓我們花費在Junit test上,所以,鄙人感覺還是應該重申一下自己的立場,感覺還是應該對JMock了解一下,不光是加快現在的Junit測試的進度,還應該補充一下自己在Junit測試上的知識;
(注: 以下內容都是筆者自己的理解,如果有哪些地方不妥當的,還望各位大俠給出建議,小編在此先謝謝啦!!!!)
1. 首先就是創建MockContext,用來構造具體要被mock的方法對象。
2. 通過step1創建的mockContext構造具體的mock對象。
eg:mockContext.mock(Class,ObjectAgentName);
其中mock方法中的參數,Class指的是要構造的mock對象的類型,這里只能是接口;ObjectAgentName指的是被mock對象的代理名稱,這個參數不是必須的;如果沒有這個參數,當前就會根據Class創建默認的代理名稱;
注意: 在MockContext中,代理名稱唯一,也就是不能出現名稱相同的兩個mock對象。
3. 通過mockContext.checking()方法把mock對象替代具體代碼中的對象。
eg:?
mockContext.checking(new?Expectations()?{ ??
? ? ?{ ??
// 1. 具體參數,當參數為"dandan"的時候,addressServcie對象的findAddresses方法用returnIterator返回一個Iterator<Address>對象。 ??
????????????allowing(addressServcie).findAddresses("dandan"); ??
????????????will(returnIterator(addresses)); ??
// 2. 參數類型,當參數為String類型的時候,addressServcie對象的findAddresses方法用returnIterator返回一個Iterator<Address>對象。 ??
????????????allowing(addressServcie).findAddresses(noNull(any(String.class))); ??
????????????will(returnIterator(addresses));?
//?當參數為"dandan"的時候,addressServcie對象的findAddresses方法用returnIterator返回一個Iterator<Address>對象。 ??
????????????oneof(addressServcie).findAddresses("dandan"); ??
????????????will(returnIterator(addresses));?
// 在代碼中多次執行被mock的方法對象的時候。
????????????atList(1).of(addressServcie).findAddresses(noNull(any(String.class))); ??
????????????will(returnIterator(addresses));?
?
????????} ??
????});?
?
轉載于:https://www.cnblogs.com/chinaWang/p/4189702.html
總結
以上是生活随笔為你收集整理的浅谈Junit测试中反射和Jmock的应用的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 2014-12-27 迎接15年前夕,原
- 下一篇: Android添加垂直滚动scrollv