我是否必须将我的集成测试与我的单元测试的其余部分放在src/test下,并通过*Integr*Test、*ITTest之类的模式来区分它们,或者它们是否在src/it中(就像开发Maven插件和使用maven-invoker-plugin时那样)?
我问这个问题是因为,在我看来,如果单元测试和集成测试都在同一个位置(即使它们是通过Maven配置文件控制的),它看起来不够干净。
发布于 2016-06-24 12:36:14
首先,maven-fails默认情况下运行在另一个生命周期阶段(集成-测试),就像maven-surefire-plugin (测试)所做的那样。此外,如果您愿意检查集成测试是否失败,您可以配置maven-故障安全插件,以便在verify测试阶段运行post-integration-test目标。这可以自由配置。
我脑子里有一个问题。您有10个模块,现在要进行集成测试吗?它们属于哪个模块?所以最好是有一个单独的模块,因为它们不属于10个模块中的任何一个。
除此之外,maven-surefire-plugin已经在默认生命周期中进行了配置。是的,一个补充的目标将是一个想法,但它会混淆用户使用相同的插件在不同的关系。因此,分离关注点在这里很重要。除了整个默认的configurations...Those插件共享一个更大的代码基础,但有差异.
此外,Tunaki已经提到的是pre-integration-test,用于设置服务器等integration-test,以及在post-integration-test阶段关闭服务/服务器。这种情况永远不会发生在单元测试中。
使用单独的模块通常可以简化it的设置,这意味着与单元测试有不同的依赖关系(类路径)。例如,像Arquillian.org这样的东西从未在单元测试中使用过。这不能在一个单一的module...also中处理,一个好的方面就是这里的关注点分离。
此外,集成测试在默认情况下不能被平分,而单元测试可以定义为单元测试,否则它们就不是单元测试。
那么文件夹布局呢?在集成测试模块中,您可以简单地使用src/test/java文件夹,这意味着您不需要补充配置等(例如,通过build maven-plugin等)。这使得它更容易,并且更遵循传统的配置范式。
不要忘记,您可以更好地控制在您的构建(CI)中运行的内容。
还有另一个重要的提示。通常,集成测试通常与基础设施相关,因此,有时忽略那里的故障可能是有用的,可以简单地使用maven-故障安全插件的check目标来处理.
IT模块的一个示例可以找到这里。
发布于 2016-06-23 19:14:29
您是正确的,src/it是打算用于插件的集成测试。在标准目录布局中提到了这一点。
默认情况下,maven-failsafe-plugin将在${project.build.testSourceDirectory}中查找您的集成测试,这是一样的作为单元测试的maven-surefire-plugin。默认情况下,这对应于src/test/java。通过遵循命名约定使集成测试变得不同
<includes>
<include>**/IT*.java</include>
<include>**/*IT.java</include>
<include>**/*ITCase.java</include>
</includes>这与单元测试的命名约定不同:
<includes>
<include>**/Test*.java</include>
<include>**/*Test.java</include>
<include>**/*TestCase.java</include>
</includes>因此,虽然它们驻留在同一个源文件夹(src/test/java)中,但名称上的差异清楚地区分了它们。而且,这是默认的设置,因此不需要额外的配置。
尽管如此,你还可以有其他选择:
build-helper-maven-plugin:add-test-source目标将自定义文件夹添加为测试源文件夹。https://stackoverflow.com/questions/37998040
复制相似问题