我一直在嘗試了解 Surefire 插件如何在內部決定使用哪個測驗框架(TestNG、Jupiter、Junit4 等)
它是否使用反射并嘗試在類路徑中找到每個框架的存在?
(查看依賴項,Surefire 似乎在其傳遞依賴項中附帶了 junit4 - junit:JUnit:jar:4.12 )
uj5u.com熱心網友回復:
可以顯式傳遞提供程式(測驗框架型別),設定附加插件依賴項,例如對于 TestNG:
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-surefire-plugin</artifactId>
<version>3.0.0-M5</version>
<dependencies>
<dependency>
<groupId>org.apache.maven.surefire</groupId>
<artifactId>surefire-testng</artifactId>
<version>3.0.0-M5</version>
</dependency>
</dependencies>
</plugin>
如果沒有指定
Surefire 通常會根據專案類路徑中存在的 TestNG/JUnit 版本自動選擇要使用的測驗框架提供程式。
從這個檔案:
https://maven.apache.org/surefire/maven-surefire-plugin/examples/providers.html
Surefire 插件如何在內部決定使用哪個測驗框架
讓我們看看它是如何實作的。
有方法ProviderInfo介面boolean isApplicable();
提供者資訊.java
我在課堂上發現了多個實作AbstractSurefireMojo.java
AbstractSurefireMojo.java
為了:
- TestNgProviderInfo
- JUnit3ProviderInfo
- JUnit4ProviderInfo
- JUnitPlatformProviderInfo
- JUnitCoreProviderInfo
- 動態提供者資訊
還有一個受保護的方法protected List<ProviderInfo> createProviders( TestClassPath testClasspath )參考了所有這些實作。
protected List<ProviderInfo> createProviders( TestClassPath testClasspath )
throws MojoExecutionException
{
Artifact junitDepArtifact = getJunitDepArtifact();
return providerDetector.resolve( new DynamicProviderInfo( null ),
new JUnitPlatformProviderInfo( getJUnit5Artifact(), testClasspath ),
new TestNgProviderInfo( getTestNgArtifact() ),
new JUnitCoreProviderInfo( getJunitArtifact(), junitDepArtifact ),
new JUnit4ProviderInfo( getJunitArtifact(), junitDepArtifact ),
new JUnit3ProviderInfo() );
}
并且ProviderDetector類呼叫方法isApplicable()中的每個 providerInfo resolve。
ProviderDetector.java
And looks like the first applicable is selected:
private Optional<ProviderInfo> autoDetectOneWellKnownProvider( ProviderInfo... wellKnownProviders )
{
Optional<ProviderInfo> providerInfo = stream( wellKnownProviders )
.filter( ProviderInfo::isApplicable )
.findFirst();
providerInfo.ifPresent( p -> logger.info( "Using auto detected provider " p.getProviderName() ) );
return providerInfo;
}
轉載請註明出處,本文鏈接:https://www.uj5u.com/qukuanlian/425988.html
下一篇:java.lang.NoSuchMethodError:'com.google.common.collect.ImmutableMap嘗試使用Chromedriver和Maven執行測驗時出
