Maven Surefire 提供程序 API
从 Surefire 的 2.7 版开始,有一个提议的公共 API 可供外部提供商使用 Surefire 功能。
Surefire 的主要功能是分叉、报告和目录/类路径扫描。其余功能在提供程序中实现。
请注意,在另行声明之前,此 API 仍可能发生更改,即使是在小修订版中也是如此。这主要是为了满足新供应商的需求。
对提供者的要求
任何供应商都必须满足三件事:
- 提供者必须实现org.apache.maven.surefire.providerapi.SurefireProvider接口。
- 提供程序包含一个名为org.apache.maven.surefire.providerapi.SurefireProvider的META-INF/services文件条目(根据ServiceLoader)。此文件包含实际提供程序类的名称。
- 实际的提供者类包含一个接受org.apache.maven.surefire.providerapi.ProviderParameters实例的单参数构造函数。该接口向提供者实现提供了所有可靠的功能,请参阅该接口的 javadoc 以获取选项。
Surefire 中有 4 个著名的提供程序也是以这种方式实现的,因此可以通过查看 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 );