日日操夜夜添-日日操影院-日日草夜夜操-日日干干-精品一区二区三区波多野结衣-精品一区二区三区高清免费不卡

公告:魔扣目錄網(wǎng)為廣大站長提供免費(fèi)收錄網(wǎng)站服務(wù),提交前請(qǐng)做好本站友鏈:【 網(wǎng)站目錄:http://www.ylptlb.cn 】, 免友鏈快審服務(wù)(50元/站),

點(diǎn)擊這里在線咨詢客服
新站提交
  • 網(wǎng)站:51998
  • 待審:31
  • 小程序:12
  • 文章:1030137
  • 會(huì)員:747

本文介紹了Java模塊:Mockito 2.20.0的可訪問性問題的處理方法,對(duì)大家解決問題具有一定的參考價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)吧!

問題描述

我正在從Java 8遷移到Java 10,并且我正在運(yùn)行我的測(cè)試,該測(cè)試現(xiàn)在由于包保護(hù)類而失敗。構(gòu)建在Maven 3.5.4+Oracle JDK 10.0.2下運(yùn)行:

MAVEN-COMPILER-PLUGIN 3.7.0+ASM 6.2
maven-surefire-plugin 2.22.0+ASM 6.2+junit 5.2.0
編譯器/Surefire都需要ASM 6.2,因?yàn)檫@些插件使用的ASM版本存在錯(cuò)誤。
moockito-core 2.20.0(但之前在Java 8中使用2.20.0)。
日食光子R

該項(xiàng)目可以在這里找到ide-bugs.zip(它位于Eclipse論壇,因?yàn)槲覟榱硪粋€(gè)問題Topic on Eclipse制作了這個(gè)Topic on Eclipse,這一次是因?yàn)镋clipse的模塊有本地錯(cuò)誤)。

測(cè)試非常簡單:我們嘗試用不同的訪問級(jí)別模擬不同的類–所有這些都在Java 8中工作。

    包保護(hù)類
    公共類,但未導(dǎo)出,未打開
    公共類未導(dǎo)出,但向Mockito開放
    公共類未導(dǎo)出,但向所有人開放
    包保護(hù)類未導(dǎo)出,但對(duì)Mockito打開
    包保護(hù)類未導(dǎo)出,但向所有人開放

在Java 8中,情況1、5和6是相同的(包的訪問受保護(hù))。案例2、3和4相同(公共訪問權(quán)限)。

測(cè)試失敗,因?yàn)镸ockito既不能:

類org.mockito.codegen.NotExportedOpenToMockitoProtected$MockitoMock$117073031無法訪問其超類nodatafound.mjpmsuc.withopens.NotExportedOpenToMockitoProtected
類org.mockito.codegen.NotExportedNotOpenedPublic$MockitoMock$365628885(在未命名模塊@0x3f07b12c中)無法訪問類nodatafound.mjpmsuc.internal.NotExportedNotOpenedPublic(在模塊nodatafound.moockito_jpms_usecase中),因?yàn)槟Knodatafound.moockito_jpms_usecase不會(huì)將nodatafound.mjpmsu.Internal導(dǎo)出到未命名模塊@0x3f07b12c

Mockito實(shí)際上有一個(gè)自動(dòng)模塊名,但被視為未命名模塊,因?yàn)樗蠮AR都在類路徑中找到一個(gè)大的”未命名模塊”。

雖然我可以從包保護(hù)包遷移到非導(dǎo)出包,但我無法理解如何解決使我的接口/類對(duì)其他模塊不可見的問題?

[編輯]一個(gè)月后更新了插件/依賴項(xiàng)的版本,但沒有結(jié)果。

推薦答案

我在這里找到了問題的部分答案:https://blog.codefx.org/java/java-module-system-tutorial/#Open-Packages-And-Modules

Mockito正在使用反射從模塊或類路徑訪問類。
Mockito位于”未命名模塊”中,因?yàn)镸aven將其添加到類路徑中,而不是模塊路徑中。這解釋了為什么opens package to org.mockito從不工作:沒有org.mockito模塊。
Maven Surefire不會(huì)為了允許Mockito訪問它而參與模塊的”打開”。
Mockito是(不再是?)能夠模擬非私有類和非最終類。無論如何,包保護(hù)類都是私有的。錯(cuò)誤相當(dāng)明顯:Mockito創(chuàng)建了一個(gè)擴(kuò)展包保護(hù)類的類,現(xiàn)在失敗了(它以前還在工作,但這可能是因?yàn)镸ockito在與被模仿的包相同的包中創(chuàng)建了類)。

然而,這在每個(gè)模塊的pom.xml中提供了一個(gè)有問題的配置:

      <plugin>
        <groupId>org.apache.maven.plugins</groupId>
        <artifactId>maven-surefire-plugin</artifactId>
        <configuration>
          <argLine>    
  --add-opens nodatafound.mockito_jpms_usecase/nodatafound.mjpmsuc=ALL-UNNAMED
        </configuration>      
      </plugin>

我們需要顯式將打開添加到未命名的模塊。這不應(yīng)在MODULE-INFO.Java中完成,因?yàn)樗鼤?huì)將模塊公開給所有其他模塊或JAR,這不利于封裝。

這有問題,因?yàn)椋?/p>

您需要在pom.xml中為每個(gè)包指定它。
這會(huì)給surefire配置增加額外的負(fù)擔(dān),而我更喜歡簡單的配置。
您沒有來自IDE的驗(yàn)證;Eclipse將驗(yàn)證模塊-info.java,標(biāo)記為無效的包。
M2E未將必要的<argLine />傳遞給Eclipse JUnit插件,導(dǎo)致在Eclipse中測(cè)試失敗。

maven方法(據(jù)我所知在Eclipse中也是如此,可能在Gradle中也是如此)不允許為測(cè)試添加額外的模塊信息;例如:讓測(cè)試依賴是模塊化的(這可能是使用每個(gè)源模塊的專用測(cè)試模塊來完成的,就像Eclipse對(duì)插件測(cè)試所做的那樣)。

這篇關(guān)于Java模塊:Mockito 2.20.0的可訪問性問題的文章就介紹到這了,希望我們推薦的答案對(duì)大家有所幫助,

分享到:
標(biāo)簽:2.20 Java Mockito 性問題 模塊 訪問
用戶無頭像

網(wǎng)友整理

注冊(cè)時(shí)間:

網(wǎng)站:5 個(gè)   小程序:0 個(gè)  文章:12 篇

  • 51998

    網(wǎng)站

  • 12

    小程序

  • 1030137

    文章

  • 747

    會(huì)員

趕快注冊(cè)賬號(hào),推廣您的網(wǎng)站吧!
最新入駐小程序

數(shù)獨(dú)大挑戰(zhàn)2018-06-03

數(shù)獨(dú)一種數(shù)學(xué)游戲,玩家需要根據(jù)9

答題星2018-06-03

您可以通過答題星輕松地創(chuàng)建試卷

全階人生考試2018-06-03

各種考試題,題庫,初中,高中,大學(xué)四六

運(yùn)動(dòng)步數(shù)有氧達(dá)人2018-06-03

記錄運(yùn)動(dòng)步數(shù),積累氧氣值。還可偷

每日養(yǎng)生app2018-06-03

每日養(yǎng)生,天天健康

體育訓(xùn)練成績?cè)u(píng)定2018-06-03

通用課目體育訓(xùn)練成績?cè)u(píng)定