日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

moreunit_MoreUnit与MoreUnit

發(fā)布時間:2023/12/3 编程问答 37 豆豆
生活随笔 收集整理的這篇文章主要介紹了 moreunit_MoreUnit与MoreUnit 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

moreunit

就在一年多以前,我寫了一篇關(guān)于在Eclipse中使用JUnit的文章。 評論者之一推薦MoreUnit ,以進(jìn)一步提高測試效率。 嘗試一下讓我感到很高興,并且我的自主神經(jīng)系統(tǒng)立即記住了該插件的鍵盤快捷鍵……

另外,在使用MoreUnit一段時間后,我發(fā)現(xiàn)我的一個工作例程發(fā)生了細(xì)微但值得注意的變化。 更準(zhǔn)確地說,在重構(gòu)1時 ,我傾向于提取比自己以前更多的由單元測試覆蓋的類。 由于保持許多小類2的凝聚力,這可能是一件好事。

好吧,有人可以說“ MoreUnit,名字說明了一切”,但是由于我并不希望這樣使用,所以我認(rèn)為這可能是一篇不錯的帖子。 因此,讓我們看下面的示例開始:

class ActionItem extends MouseAdapter {private Label control;private Runnable action;private boolean mouseDown;[...]ActionItem( Composite parent, Runnable action ) {this.control = new Label( parent, SWT.NONE );this.control.addMouseListener( this );this.action = action;}@Overridepublic void mouseDown( MouseEvent event ) {markMouseDown();}@Overridepublic void mouseUp( MouseEvent event ) {handleMouseUp( event );}private void markMouseDown() {mouseDown = true;}private void handleMouseUp( MouseEvent event ) {if( mouseDown && inRange( event ) ) {action.run();}mouseDown = false;}private static boolean inRange( MouseEvent event ) {Point size = ( ( Control )event.widget).getSize();return event.x >= 0 && event.x <= size.x && event.y >= 0 && event.y <= size.y;}[...] }

該類是自定義UI控件3的摘錄,它顯示了此類控件如何實現(xiàn)鼠標(biāo)單擊行為。 我們假設(shè)我們有一個適當(dāng)?shù)膯卧獪y試用例,并且具有足夠的覆蓋范圍并可以運(yùn)行。 可以安全地假設(shè)在到達(dá)上面的代碼片段之前,已經(jīng)進(jìn)行了幾個結(jié)構(gòu)重構(gòu)步驟。

將鼠標(biāo)單擊視為一項責(zé)任,因此應(yīng)將鼠標(biāo)分為自己的類。 為此,我通常從內(nèi)部類開始,在該類中將相關(guān)的方法和字段移至其中。 之后,我將這種新類型的實例分配給周圍類的新字段,如下面的ActionItem構(gòu)造函數(shù)所示。 最后但并非最不重要的一點是,我通過將這些調(diào)用委托給新創(chuàng)建的字段4來修復(fù)現(xiàn)在未定義的方法:

class ActionItem extends MouseAdapter {private Label control;private ClickHandler clickHandler;[...]ActionItem( Composite parent, Runnable action ) {this.control = new Label( parent, SWT.NONE );this.clickHandler = new ClickHandler( action );this.control.addMouseListener( this );}@Overridepublic void mouseDown( MouseEvent event ) {clickHandler.markMouseDown();}@Overridepublic void mouseUp( MouseEvent event ) {clickHandler.handleMouseUp( event );}static class ClickHandler {private Runnable action;private boolean mouseDown;ClickHandler( Runnable action ) {this.action = action;}private void markMouseDown() { [...] }private void handleMouseUp( MouseEvent event ) { [...] }private static boolean inRange( MouseEvent event ) { [...] }}[...]}

通過成功運(yùn)行ActionItem的測試用例并再次檢查覆蓋范圍,可以確定上述提取沒有引入任何錯誤。 因此,將ClickHandler最終移到其自己的文件中感覺很省錢。

但是,現(xiàn)在有一個類充當(dāng)某種“子組件”,僅被“主”組件的測試用例間接覆蓋。 我觀察到,這樣的階級經(jīng)常養(yǎng)成自己的生活。 意味著它們的功能擴(kuò)展了,或者它們正在被其他類或兩者重用。 在某個時間點,添加有意義的和/或易于理解的測試可能會變得相當(dāng)困難。 這是因為測試類本身缺乏通過將其分為兩部分而引入被測單元的內(nèi)聚性。

因此,我通常立即為提取的類創(chuàng)建一個特定的測試用例。 甚至與MoreUnit可用一樣,這可以非常直觀地實現(xiàn),實際上是自動為新的測試用例提供了一組基本的測試方法存根。 繼續(xù)我們的例子中,我們會打開提取ClickHandler在編輯器中,按“Ctrl + J” 5在upcomming向?qū)姆N方法,我們希望有創(chuàng)建存根和選擇:

按Finish將創(chuàng)建一個正確位于項目6的相應(yīng)測試源文件夾下的測試用例,根據(jù)您的MoreUnit設(shè)置,其外觀如下所示:

public class ClickHandlerTest {@Testpublic void testMarkMouseDown() {fail( "Not yet implemented" );}@Testpublic void testHandleMouseUp() {fail( "Not yet implemented" );} }

存根可以作為從頭開始有意義地填充測試用例的起點。 但是請注意,已經(jīng)有完整的內(nèi)容提供了ActionItemTest中的一組測試。 因此,另一種可能性是將鼠標(biāo)單擊相關(guān)測試的內(nèi)容移至新創(chuàng)建的ClickHandlerTest 。 盡管后者現(xiàn)在對新單元進(jìn)行了徹底的測試,但必須注意,在ActionItemTest中還有足夠的測試可確保ClickHandler 7的正確集成。

結(jié)論

現(xiàn)在工作了一段時間,給人的印象是代碼的可維護(hù)性和進(jìn)一步開發(fā)(包括測試用例)逐漸得到改善。 當(dāng)然,可以說,MoreUnit不應(yīng)成為決定是否將某種責(zé)任歸入自己的班級的關(guān)鍵因素。 但是在我看來,通過幫助克服一個人較弱的自我,只需單擊幾下鼠標(biāo),就可以為新班級準(zhǔn)備一個合適的測試用例,從而簡化了這樣做的決定。

  • 參見“測試驅(qū)動開發(fā)”的紅色/綠色/重構(gòu)原理。
  • 羅伯特·馬丁(Robert C. Martin),《清潔代碼》,第10章:類
  • 盡管該示例是受我當(dāng)前工作的啟發(fā),但我將其簡化為本文所需的最低限度
  • 進(jìn)一步的重構(gòu)步驟可能是更改ClickHandler,使其擴(kuò)展MouseAdapter或?qū)崿F(xiàn)MouseListener。 之后,單擊處理程序本身可以在替換操作項的標(biāo)簽上注冊為鼠標(biāo)偵聽器。 這將完全消除ActionItem委派的鼠標(biāo)處理程序方法。 但是我在這里省略了此步驟以保持帖子的范圍
  • 此快捷方式通常用于在被測單元及其相應(yīng)的測試用例之間切換。 當(dāng)您很快適應(yīng)這種情況時,它以某種方式比特定的裝飾者更多地充當(dāng)了“缺失的測試提醒”……
  • 對于基于OSGi的系統(tǒng),這也可能是一個測試片段
  • 請注意,提取過程簡化了鼠標(biāo)單擊功能測試的測試設(shè)置。 提取的類不依賴于構(gòu)造函數(shù)中的SWT小部件派生類,從而允許提供基于模擬的測試設(shè)置。 如果沒有ActionItem麻煩,那么后者是不可能的,因此例如,需要使用setup / teardown方法來創(chuàng)建,初始化和處置Display / Shell實例。
  • 參考:來自Code Affine博客的JCG合作伙伴 Frank Appel的MoreUnit和MoreUnit 。

    翻譯自: https://www.javacodegeeks.com/2014/02/more-units-with-moreunit.html

    moreunit

    總結(jié)

    以上是生活随笔為你收集整理的moreunit_MoreUnit与MoreUnit的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。