Maven Surefire 提供程序 API
从 Surefire 2.7 版开始,有一个提议的公共 API 可供外部提供商使用 Surefire 功能。
Surefire 的主要功能是分叉、报告和目录/类路径扫描。其余功能在提供程序中实现。
请注意,在另行声明之前,此 API 仍可能发生更改,即使是在小修订版中也是如此。这种变化主要是为了满足新供应商的需求。
对提供者的要求
任何供应商都必须满足三件事:
- 提供者必须实现该
org.apache.maven.surefire.providerapi.SurefireProvider
接口。 - 提供程序包含一个
META-INF/services
名为org.apache.maven.surefire.providerapi.SurefireProvider
(根据ServiceLoader)的文件条目。此文件包含实际提供程序类的完全限定名称。 - 实际的提供者类包含一个单参数构造函数,它接受
org.apache.maven.surefire.providerapi.ProviderParameters
. 此接口将所有 Surefire 功能提供给提供程序实现。有关选项,请参阅此接口的 javadoc。
Surefire 中有四个著名的提供程序也是以这种方式实现的,因此可以通过查看 Surefire 源代码本身找到示例。surefire-junit47
是展示实现。
本文中提到的接口上的 javadoc 应该足以编写提供程序。提供程序作为依赖项添加到 Surefire 和 Failsafe 插件中。
2.11 的 API 更改
在 2.11 之前,提供者会做
TestsToRun scanned = directoryScanner.locateTestClasses( testClassLoader, scannerFilter );
并且课程将按排序顺序到达。在 2.11 中,提供者必须执行一个额外的步骤;
TestsToRun scanned = directoryScanner.locateTestClasses( testClassLoader, scannerFilter ); 返回 providerParameters.getRunOrderCalculator().orderTestClasses(scanned);
2.12.2 的 API 更改:
在此版本之前,提供商会做
directoryScanner = booterParameters.getDirectoryScanner(); final TestsToRun scanResult = directoryScanner.locateTestClasses( testClassLoader, testChecker );
在这个版本ProviderParameters#getDirectoryScanner
中已被弃用,它*将*在下一个主要版本中被删除。相反,使用
scanResult = booterParameters.getScanResult(); final TestsToRun testsToRun = scanResult.applyFilter(testChecker, testClassLoader );