穿越JUnit流
關(guān)于JUnit 5遷移的好處之一是,您可以在老式模式下運(yùn)行JUnit 4測(cè)試,并且所有內(nèi)容仍然兼容。 不利的一面是,某些注釋和方法在JUnit 4和JUnit 5中具有相同的名稱(chēng),并且當(dāng)兩組庫(kù)依賴(lài)項(xiàng)都可用時(shí),很容易導(dǎo)入錯(cuò)誤的內(nèi)容并產(chǎn)生不符合要求的測(cè)試。努力工作。
但是,更糟糕的是,當(dāng)沒(méi)有意義的測(cè)試也沒(méi)有使構(gòu)建失敗時(shí)。
考慮以下測(cè)試:
import org.junit.Test; import org.junit.jupiter.api.BeforeEach; import static org.junit.Assert.assertEquals; public class AccidentalJUnit4Test { @BeforeEach public void beforeEach() { } @Test public void test() { assertEquals( 1 , 1 ); } }這是JUnit 5的注釋和JUnit 4的一些可怕的湯。 它在IDE中運(yùn)行,但是在maven構(gòu)建中,它被忽略了,因?yàn)?#64;Test來(lái)自錯(cuò)誤的JUnit,并且我沒(méi)有運(yùn)行junit-vintage 。
那么運(yùn)行junit-vintage嗎?
這是怎么發(fā)生的?
就我而言,我已經(jīng)導(dǎo)入了JUnit 5的TestContainers集成,該集成具有對(duì)JUnit 4的傳遞依賴(lài)。這不是很好,但還不是世界末日。 但是,我只希望代碼中包含JUnit 5測(cè)試,但是我可能會(huì)意外地用JUnit 4位編寫(xiě)測(cè)試,沒(méi)有人會(huì)注意到!
這些一半形式的測(cè)試從未打算如此,因此我希望它們使構(gòu)建失敗。
什么不起作用
- Checkstyle – checkstyle可以掃描禁止的import語(yǔ)句,但是我不使用它進(jìn)行src/test掃描,并且我們項(xiàng)目的checkstyle規(guī)則與另一個(gè)使用junit-vintage的有效項(xiàng)目共享。
- Macker –復(fù)雜的掃描儀,似乎開(kāi)箱即用
- Enforcer –這將使我無(wú)法包括JUnit 4依賴(lài)項(xiàng)……只是我忍不住允許了
我為什么要在乎?
通過(guò)增加自動(dòng)化功能來(lái)發(fā)現(xiàn)已知錯(cuò)誤并告訴您有關(guān)錯(cuò)誤的信息,這比在周?chē)l(fā)出警告要好得多,而且仍然可能出現(xiàn)錯(cuò)誤,從而使事情變得防錯(cuò)。
就像有人張貼標(biāo)語(yǔ)來(lái)警告該水非常熱,而不是在適當(dāng)?shù)臏囟认绿峁┧粯?#xff01;
任何可以賦予我們強(qiáng)制功能的東西都是有好處的。
什么有效
我在GitHub上找到了一個(gè)愚蠢而簡(jiǎn)單的答案。
這個(gè)Maven Grep插件效果很好:
< build > < plugins > <!-- grep maven plugin set to filter naughty JUnit4 stuff --> < plugin > < groupId >net.radai</ groupId > < artifactId >grep-maven-plugin</ artifactId > < version >1.1</ version > < executions > < execution > < goals > < goal >grep</ goal > </ goals > < phase >test</ phase > < configuration > < greps > < grep > < failIfFound >true</ failIfFound > < filePattern >src/test/java/**/*.java</ filePattern > < grepPattern >import\s+(static\s+)?org\.junit\.(Assert|Test|Before|After|AfterClass|Assume|BeforeClass|ClassRule|Rule|FixMethodOrder|Ignore|Rule)</ grepPattern > < outputPattern >Found JUnit 4 imports in file ${fileName} at line ${lineNumber} : ${line}</ outputPattern > </ grep > </ greps > </ configuration > </ execution > </ executions > </ plugin > </ plugins > </ build > <!-- you also need to add the distribution repo --> < pluginRepositories > < pluginRepository > < id >ossrh</ id > < url > https://oss.sonatype.org/content/groups/public </ url > </ pluginRepository > </ pluginRepositories >以上內(nèi)容對(duì)我來(lái)說(shuō)可以防止發(fā)生錯(cuò)誤,它可能對(duì)您有用。
我在GitHub中放置了上述代碼的一個(gè)工作示例(由于正確的原因而失敗)。
信用到期
我?guī)缀醴艞壛松鲜鰡?wèn)題。 幸運(yùn)的是,開(kāi)源社區(qū)非常出色。
Radai Rosenblatt于2016年編寫(xiě)了此插件。一個(gè)名為Michal Lozinski的撰稿人于2017年添加了文件模式掃描。
當(dāng)我們第一次嘗試使用上述配置時(shí),它沒(méi)有用。 文檔沒(méi)有描述如何執(zhí)行此操作,但是閱讀插件的代碼顯示可以使用filePattern 。 但是,它沒(méi)有用。
我今天聯(lián)系了Radai,他更新了該插件的發(fā)行版,現(xiàn)在可以使用了。
沒(méi)有開(kāi)源,這是不可能的。 沒(méi)有作者承擔(dān)對(duì)陌生人的幫助的責(zé)任,這是不可能的。
謝謝!!!
翻譯自: https://www.javacodegeeks.com/2019/08/crossing-junit-streams.html
總結(jié)
- 上一篇: 妙鸭相机推出免费版 8张照片便可生成个人
- 下一篇: 百度世界大会增设社会报名 李彦宏将现场“