开发者中心

在使用surefire时,有必要了解一些事情:

多模块项目

该插件是作为多模块插件的一部分构建的。生成的“项目信息”将建议您查看(例如)http://svn.apache.org/repos/asf/maven/surefire/trunk/maven-surefire-plugin。事实上,您需要查看(例如)http://svn.apache.org/repos/asf/maven/surefire/trunk 并从那里构建。

制作用于演示问题的测试用例

报告问题时,创建一个演示问题的小型示例项目非常有用。Surefire 已经包含大量此类项目,可以在 https://svn.apache.org/repos/asf/maven/surefire/trunk/surefire-integration-tests/src/test/resources/ 找到它们。可以检查一个预先存在的项目并像这样运行它:

svn co https://svn.apache.org/repos/asf/maven/surefire/trunk/surefire-integration-tests/src/test/resources/failsafe-buildfail
cd failsafe-buildfail
mvn -Dsurefire.version=2.12 verify

附加调试器

有时将远程调试器附加到surefire fork 以尝试确定/really/ 正在发生什么是合适的。如果您结帐并构建主干,您通常会执行以下操作:

  mvn -Dmaven.surefire.debug=true install

在 IDE 中加载源代码,在 ForkedBooter#main 的开头设置断点并将调试器附加到端口 5005。

测试用例

Surefire 的所有补丁都必须包含测试覆盖率,无论是作为集成测试还是单元测试。端到端集成测试必须涵盖所有新功能(更改/添加的插件选项)。

还有许多其他集成测试都在surefire-integration-tests/src/test/resources中的小样本项目上运行

示例集成测试是 Surefire141PluggableProvidersIT 和相应的surefire-integration-tests/src/test/resources/surefire-141-pluggableproviders。

基本源代码阅读清单

一些方法/类比其他方法/类更多地揭示了一段代码的基本工作。随附的类/方法是快速熟悉代码的“阅读清单”:

AbstractSurefireMojo#executeAllProviders
ForkStarter#fork
ForkedBooter#main

JDK 版本

万无一失的引导程序能够一直引导回 jdk1.3。具体来说,这意味着surefire-api、surefire-booter、common-junit3 和surefire-junit3 是源/目标1.3。该插件和几个提供程序是 1.5。

提供者隔离

SUT(被测对象)中的类覆盖了万无一失的提供者中的任何类。这意味着使用任何第三方依赖项(除了测试框架本身)的提供者应该将这些类隐藏到不同的包中。

通用提供程序模块

surefire-providers 模块包含 common-junitXX 模块。这些模块依赖于 JUnit 的 XX 版本,并且可以在正确的 JUnit 版本级别访问 JUnit API。也可以编写将使用正确的 JUnit 版本运行的单元测试。在构建时,这些“通用”模块的所有相关部分都只是隐藏在提供程序的 jar 文件中。

影火

“Shadefire”是在 surefire 构建中运行的第一个模块。这将创建为 JUnit 提供程序的阴影版本,然后此提供程序用于构建万无一失的自身(从 2.8 之后的任何版本开始)。这是因为 SUT 覆盖了提供程序,并且 shadefire 提供程序已被重新定位,以避免在surefire 自身构建时这种覆盖。

部署/释放surefire

Surefire 依赖于自己之前的一个版本,对于 maven 2.2.x 依赖解析来说太高级了,构建 surefire 需要 maven 3.x