如何使用注释在 testng + maven 中分离单元测试和集成测试?

Posted

技术标签:

【中文标题】如何使用注释在 testng + maven 中分离单元测试和集成测试?【英文标题】:How to seperate unit and integration tests in testng + maven using annotations? 【发布时间】:2013-10-23 00:27:11 【问题描述】:

maven 故障安全插件需要能够区分单元测试和集成测试。似乎在使用 JUnit 时,一种分离测试的方法是使用 JUnit @Categories 注释。这篇博文展示了如何使用junit http://www.agile-engineering.net/2012/04/unit-and-integration-tests-with-maven.html

@Category(IntegrationTest.class)
public class ExampleIntegrationTest

 @Test
 public void longRunningServiceTest() throws Exception 

 

如何使用 TestNG 和 Maven 故障安全插件完成同样的事情。我想在测试类上使用注释将它们标记为集成测试。

【问题讨论】:

为什么要使用注释而不是命名约定?此外,在大多数情况下,最好有一个包含集成测试的单独 maven 模块。您可能会改用 TestNG 中的组信息,但我认为这是错误的方式(我的观点)。 @khmarbaise 我不想拥有单独的集成测试模块,因为它会在我的应用程序中创建大量模块。注释使 Eclipse 中可以轻松找到所有使用集成测试注释标记的类。我可以定义自己的更专业的注释,例如需要运行 tomcat 服务器的 rest api 集成测试,vs selenium 测试,vs 需要数据库服务器但没有 tomcat 服务器的服务集成测试......等等。简而言之,注释是更灵活。 【参考方案1】:

看来我参加这个聚会迟到了,但对于未来的谷歌员工,我通过以下方式让它发挥作用:

用您选择的组名注释相关的测试

@Test(groups='my-integration-tests')
public class ExampleIntegrationTest 
  @Test
  public void someTest() throws Exception 

 

告诉surefire插件(运行正常的单元测试阶段)忽略您的集成测试:

<plugin>
  <groupId>org.apache.maven.plugins</groupId>
  <artifactId>maven-surefire-plugin</artifactId>
  <configuration>
    <excludedGroups>my-integration-tests</excludedGroups>
  </configuration>
</plugin>

并告诉故障安全插件(运行集成测试)只关心您的组。

<plugin>
  <groupId>org.apache.maven.plugins</groupId>
  <artifactId>maven-failsafe-plugin</artifactId>
  <version>2.20</version>
  <executions>
    <execution>
      <goals>
        <goal>integration-test</goal>
        <goal>verify</goal>
      </goals>
    </execution>
  </executions>
  <configuration>
    <includes>**/*.java</includes>
    <groups>my-integration-tests</groups>
  </configuration>
</plugin>

【讨论】:

【参考方案2】:

我们使用 maven-surefire-plugin 进行单元测试,使用 maven-failsafe-plugin 进行集成测试。它们都与声纳很好地集成在一起。

【讨论】:

【参考方案3】:

这可以添加到测试中。

@IfProfileValue(name="test-profile", value="IntegrationTest")
public class PendingChangesITCase extends AbstractControllerIntegrationTest 
    ...

要选择要执行的测试,只需将值添加到配置文件以执行集成测试。

<properties>
    <test-profile>IntegrationTest</test-profile>
</properties>

如果所选的 maven 配置文件没有属性值,则不会执行集成测试。

【讨论】:

以上是关于如何使用注释在 testng + maven 中分离单元测试和集成测试?的主要内容,如果未能解决你的问题,请参考以下文章

为testNG项目创建maven fat jar

AWS 设备场似乎忽略了 TestNG 注释

testng运行报错 请问是为啥

testng运行报错 请问是为啥

如何在 Maven 中从 pom.xml 调用 testng.xml 文件

如何在 Eclipse 上运行 Maven 单元测试(testng)?