在 GitHub 上叉我

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