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 );