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

歡迎訪問 生活随笔!

生活随笔

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

编程问答

模拟最后一堂课

發(fā)布時(shí)間:2023/12/3 编程问答 45 豆豆
生活随笔 收集整理的這篇文章主要介紹了 模拟最后一堂课 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

前言

如果您已經(jīng)閱讀了其他有關(guān)異常模擬的博客文章,則可以通過此鏈接跳過前奏 。

我被要求匯總一些示例,這些示例如何模擬因其可測(cè)試性問題而眾所周知的Java結(jié)構(gòu):

  • 模擬私人方法
  • 模擬最終方法
  • 模擬最后一堂課
  • 模擬構(gòu)造器
  • 模擬靜態(tài)方法

我稱這些技術(shù)為異常嘲笑。 我擔(dān)心這樣的示例在沒有任何指導(dǎo)的情況下會(huì)被在模擬框架方面沒有豐富經(jīng)驗(yàn)的隊(duì)友廣泛使用。

練習(xí)TDD或BDD的開發(fā)人員應(yīng)意識(shí)到這些構(gòu)造背后的可測(cè)試性問題,并在設(shè)計(jì)測(cè)試和模塊時(shí)盡量避免它們。 這就是為什么您可能不會(huì)使用這些出色的編程方法在項(xiàng)目上經(jīng)常遇到如此異常的模擬的原因。

但是有時(shí)您必須擴(kuò)展或維護(hù)通常包含低內(nèi)聚性類的舊代碼庫。 在大多數(shù)情況下,當(dāng)前的忙碌敏捷世界沒有時(shí)間使此類易于進(jìn)行單元測(cè)試的標(biāo)準(zhǔn)方法。 當(dāng)您嘗試對(duì)此類進(jìn)行單元測(cè)試時(shí),您通常會(huì)意識(shí)到需要進(jìn)行異常模擬。

這就是為什么我決定創(chuàng)建并共享重構(gòu)注意事項(xiàng)以及異常模擬的示例和變通辦法。 示例包括使用Mockito和PowerMock模擬框架以及TestNG單元測(cè)試框架。

模擬最后一堂課

重構(gòu)注意事項(xiàng)

將類更改為非最終類(刪除final關(guān)鍵字)并以標(biāo)準(zhǔn)方式對(duì)其進(jìn)行測(cè)試。 這是我可以更改最終課程代碼時(shí)始終使用的技術(shù)。

PowerMock的用法

在使用此示例之前,請(qǐng)仔細(xì)考慮是否值得在您的項(xiàng)目中帶來字節(jié)碼操作風(fēng)險(xiǎn)。 他們收集在此博客文章中 。 我認(rèn)為,僅應(yīng)在非常罕見且不可避免的情況下使用它。

測(cè)試顯示了如何通過PowerMock框架模擬最終類。 示例涵蓋:

  • 在最終類中模擬具有返回值的方法
  • 在最終課程中模擬最終void方法
  • 驗(yàn)證最終類中的方法調(diào)用
  • 期末課程:

    public final class Plane {public static final int ENGINE_ID_RIGHT = 2;public static final int ENGINE_ID_LEFT = 1;public boolean verifyAllSystems() {throw new UnsupportedOperationException("Fail if not mocked!");}public void startEngine(int engineId) {throw new UnsupportedOperationException("Fail if not mocked! [engineId=" + engineId + "]");} }

    被測(cè)課程:

    public class Pilot {private Plane plane;public Pilot(Plane plane) {this.plane = plane;}public boolean readyForFlight() {plane.startEngine(Plane.ENGINE_ID_LEFT);plane.startEngine(Plane.ENGINE_ID_RIGHT);return plane.verifyAllSystems();} }

    測(cè)試:

    @PrepareForTest(Plane.class) public class PilotTest extends PowerMockTestCase {@Testpublic void testReadyForFlight() {Plane planeMock = PowerMockito.mock(Plane.class);Pilot pilot = new Pilot(planeMock);Mockito.when(planeMock.verifyAllSystems()).thenReturn(true);// testing methodboolean actualStatus = pilot.readyForFlight();Assert.assertEquals(actualStatus, true);Mockito.verify(planeMock).startEngine(Plane.ENGINE_ID_LEFT);Mockito.verify(planeMock).startEngine(Plane.ENGINE_ID_RIGHT);} }

    鏈接

    • 可以從Github下載源代碼。

    其他不尋常的嘲諷示例:

    • 模擬私人方法
    • 模擬最終方法
    • 模擬構(gòu)造器
    • 模擬靜態(tài)方法

    參考:在我們的JCG合作伙伴 Lubos Krnac的模擬決賽課程中 ,網(wǎng)址為http://lkrnac.net/博客。

    翻譯自: https://www.javacodegeeks.com/2014/02/mock-final-class.html

    總結(jié)

    以上是生活随笔為你收集整理的模拟最后一堂课的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。

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