【问题标题】:Arquillian test CoverageArquillian 测试覆盖率
【发布时间】:2015-08-24 14:26:19
【问题描述】:

我希望看到 IT 测试的测试覆盖率与 Arquillian 一起运行。我遇到了这个扩展:https://github.com/arquillian/arquillian-extension-jacoco

我不明白的是为什么由 JacocoInegrationTestCase 测试的 CoverageBean 类在报告中不可见。这就是我所期望的。
有人可以提供示例项目,在 Arquillian 上运行 1 个集成测试并生成测试覆盖率报告的测试类吗?
谢谢

@RunWith(Arquillian.class)
public class JacocoInegrationTestCase
{
@Deployment
public static JavaArchive createDeployment() throws Exception
{
   return ShrinkWrap.create(JavaArchive.class, "test.jar")
                 .addClasses(CoverageBean.class, JacocoInegrationTestCase.class);
}
@EJB
private CoverageBean bean;
@Test
public void shouldBeAbleToGenerateSomeTestCoverage() throws Exception
{
  Assert.assertNotNull(bean);    
  bean.test(true);

} }

@Stateless
public class CoverageBean
{
public void test(Boolean value) 
{
  String test = "test";
  if(value)
  {
     if(test.length() == 4)
     {
        long start = System.currentTimeMillis();
        test = String.valueOf(start);
     }
  } 
  else
  {
     long start = System.currentTimeMillis();
     test = String.valueOf(start);
  }

} }

 <plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-surefire-plugin</artifactId>
   <configuration>
      <skip>true</skip>
   </configuration>
<executions>
   <execution>
     <id>integration-tests</id>
     <phase>test</phase>
    <goals>
      <goal>test</goal>
   </goals>
<configuration>
   <environmentVariables>
      <JBOSS_HOME>${jbossHome}</JBOSS_HOME>
   </environmentVariables>
<skip>false</skip>
<includes>
    <include>org/jboss/arquillian/extension/jacoco/test/unit/ * </include>
         <include>org/jboss/arquillian/extension/jacoco/test/integration/ * </include>   
</includes>
</configuration>
</execution>

编辑: 我也尝试过这个项目(https://github.com/CSchulz/arquillian-jacoco-showcase),看起来很有前途,但它与 Wildfly 的发行版相违背。但在我的项目中,我们正在对已安装的 JBOSS EAP 6 实例运行 Arquillian 测试,包括数据库连接和其他安全性配置。是否有人能够更改它以使用已安装(部署)的 JBOSS 版本?谢谢

【问题讨论】:

  • 能否请您发布您的配置和部署?
  • 项目可以从github下载。我用一些相关的代码 sn-ps 更新了我的答案。仍然想知道为什么没有计算覆盖率,即使调用了代码。
  • 在 Arquillian 方面,您需要做的就是将 arquillian 依赖项更改为您在项目中已经使用的依赖项,并更改 Java EE 版本。您说您的项目在 github 上可用,但您没有添加链接。

标签: java integration-testing code-coverage jboss-arquillian jacoco


【解决方案1】:

这是适合我的配置。看看对你有没有帮助。

<plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-surefire-plugin</artifactId>
            <version>${version.plugin.maven.surefire}</version>
            <configuration>
                <failIfNoTests>false</failIfNoTests>
                <excludedGroups>org.jboss.arquillian.junit.Arquillian</excludedGroups>
            </configuration>
        </plugin>

        <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-failsafe-plugin</artifactId>
            <version>${version.plugin.maven.failsafe}</version>
            <configuration>
                <groups>org.jboss.arquillian.junit.Arquillian</groups>
                <testFailureIgnore>false</testFailureIgnore>
                <systemPropertyVariables>
                    <arquillian.launch>jbossas-remote-7</arquillian.launch>
                </systemPropertyVariables>
            </configuration>
            <executions>
                <execution>
                    <goals>
                        <goal>integration-test</goal>
                        <goal>verify</goal>
                    </goals>
                </execution>
            </executions>
        </plugin>

        <plugin>
            <groupId>org.jacoco</groupId>
            <artifactId>jacoco-maven-plugin</artifactId>
            <version>${jacoco-plugin.version}</version>
            <configuration>
                <includes>
                </includes>
                <excludes>
                    <exclude>.....</exclude>
                </excludes>
            </configuration>
            <executions>
                <execution>
                    <id>default-prepare-agent</id>
                    <goals>
                        <goal>prepare-agent</goal>
                    </goals>
                </execution>
                <execution>
                    <id>default-prepare-agent-integration</id>
                    <goals>
                        <goal>prepare-agent-integration</goal>
                    </goals>
                    <configuration>
                        <destFile>${project.build.directory}/jacoco-it.exec</destFile>
                    </configuration>
                </execution>
                <execution>
                    <id>Create Unit Test Report</id>
                    <phase>prepare-package</phase>
                    <goals>
                        <goal>report</goal>
                    </goals>
                </execution>
                <execution>
                    <id>Create Integration Test Report</id>
                    <goals>
                        <goal>report-integration</goal>
                    </goals>
                </execution>
            </executions>
        </plugin>

【讨论】:

【解决方案2】:

根据您提供的信息,您似乎尚未执行 prepare-agent 目标。您可以在README 中查看完整示例。

【讨论】:

  • 嗨@LightGuard,感谢您的回答。问题是,我正在使用在 JBOSS EAP 6 上运行的 arquillian 测试,使用数据库和其他安全配置。所以在分布式版本的wildfly或JBOSS上运行并不能解决我的问题。如果您知道一些使用 DAO 对类运行 Aquillian 测试的虚拟示例项目,那将非常有帮助。谢谢
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-07-29
  • 2018-10-18
相关资源
最近更新 更多