首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >mvn故障安全:在使用dependenciesToScan时验证是否已损坏?

mvn故障安全:在使用dependenciesToScan时验证是否已损坏?
EN

Stack Overflow用户
提问于 2015-03-14 15:14:46
回答 3查看 1.1K关注 0票数 1

我有以下的故障安全设置,当我“正常”运行时(=使用mvn验证,并且不使用dependenciesToScan),它可以正常工作:

代码语言:javascript
复制
<plugin>
  <groupId>org.apache.maven.plugins</groupId>
  <artifactId>maven-failsafe-plugin</artifactId>
  <version>2.18.1</version>
  <executions>
    <execution>
      <goals>
        <goal>integration-test</goal>
        <goal>verify</goal>
      </goals>
    </execution>
  </executions>
  <configuration>
    <failIfNoTests>true</failIfNoTests>
    <suiteXmlFiles>
      <suiteXmlFile>src/test/resources/mySuite.xml</suiteXmlFile>
    </suiteXmlFiles>
  </configuration>
</plugin>
  • 集成测试按预期运行,
  • 如果未指定测试,则验证按预期发生爆炸,以及
  • 当集成测试失败时,生成在验证阶段中断。

但是,当我采用完全相同的故障安全设置,并在“测试运行程序”pom / project中使用"dependenciesToScan“扩展它时,它只运行jar文件中的测试(所以我不会每次想运行集成测试时都重新编译/重新构建整个项目):

代码语言:javascript
复制
<plugin>
  <groupId>org.apache.maven.plugins</groupId>
  <artifactId>maven-failsafe-plugin</artifactId>
  <version>2.18.1</version>
  <executions>
    <execution>
      <goals>
        <goal>integration-test</goal>
        <goal>verify</goal>
      </goals>
    </execution>
  </executions>
  <configuration>
    <failIfNoTests>true</failIfNoTests>
    <suiteXmlFiles>
      <suiteXmlFile>src/test/resources/mySuite.xml</suiteXmlFile>
    </suiteXmlFiles>
    <dependenciesToScan>
      <dependency>${test.library.groupId}:${test.library.artifactId}</dependency>
    </dependenciesToScan>
  </configuration>
</plugin>

下面是发生的事情:

  • 集成测试按预期运行,
  • 构建失败,因为它找不到要运行的测试(在验证阶段!?-参见下面)
  • 当我删除failIfNoTests时,即使存在测试失败,也会报告构建是成功的。

我检查了各种各样的东西,并尝试了一些东西,所以我不知道我在这里可能遗漏了什么。如果我不使用dependenciesToScan,插件配置显然可以正常工作。

在使用dependenciesToScan时,故障安全插件中是否存在破坏验证业务逻辑的漏洞?

代码语言:javascript
复制
Tests run: 79, Failures: 6, Errors: 0, Skipped: 0

[INFO] 
[INFO] --- maven-failsafe-plugin:2.18.1:verify (default) @ test-runner ---
[DEBUG] Configuring mojo org.apache.maven.plugins:maven-failsafe-plugin:2.18.1:verify from plugin realm ClassRealm[plugin>org.apache.maven.plugins:maven-failsafe-plugin:2.18.1, parent: sun.misc.Launcher$AppClassLoader@42a57993]
[DEBUG] Configuring mojo 'org.apache.maven.plugins:maven-failsafe-plugin:2.18.1:verify' with basic configurator -->
[DEBUG]   (s) basedir = /xyz/test-runner
[DEBUG]   (f) encoding = UTF-8
[DEBUG]   (s) failIfNoTests = true
[DEBUG]   (s) reportsDirectory = /xyz/test-runner/target/failsafe-reports
[DEBUG]   (s) skip = false
[DEBUG]   (f) summaryFile = /xyz/test-runner/target/failsafe-reports/failsafe-summary.xml
[DEBUG]   (s) testClassesDirectory = /xyz/test-runner/target/test-classes
[DEBUG]   (s) testFailureIgnore = false
[DEBUG] -- end configuration --
[INFO] ------------------------------------------------------------------------
[INFO] BUILD FAILURE
[INFO] ------------------------------------------------------------------------
[INFO] Total time: 03:27 min
[INFO] Finished at: 2015-03-13T22:44:46-04:00
[INFO] Final Memory: 13M/250M
[INFO] ------------------------------------------------------------------------
[ERROR] Failed to execute goal org.apache.maven.plugins:maven-failsafe-plugin:2.18.1:verify (default) on project test-runner: No tests to run! -> [Help 1]
org.apache.maven.lifecycle.LifecycleExecutionException: Failed to execute goal org.apache.maven.plugins:maven-failsafe-plugin:2.18.1:verify (default) on project test-runner: No tests to run!
EN

回答 3

Stack Overflow用户

发布于 2015-03-14 16:25:27

从您发布的内容来看,Hm...first看起来您的配置是错误的:

您已经将其配置如下:

代码语言:javascript
复制
<plugin>
  <groupId>org.apache.maven.plugins</groupId>
  <artifactId>maven-failsafe-plugin</artifactId>
  <version>2.18.1</version>
  <executions>
    <execution>
      <goals>
        <goal>integration-test</goal>
        <goal>verify</goal>
      </goals>
    </execution>
  </executions>
  <configuration>
    <failIfNoTests>true</failIfNoTests>
    <suiteXmlFiles>
      <suiteXmlFile>src/test/resources/mySuite.xml</suiteXmlFile>
    </suiteXmlFiles>
  </configuration>
  <dependenciesToScan>
    <dependency>${test.library.groupId}:${test.library.artifactId}  </dependency>
  </dependenciesToScan>
</plugin>

我很惊讶你没有从Maven那里得到失败..。

但它应该是这样的。

代码语言:javascript
复制
<plugin>
  <groupId>org.apache.maven.plugins</groupId>
  <artifactId>maven-failsafe-plugin</artifactId>
  <version>2.18.1</version>
  <executions>
    <execution>
      <goals>
        <goal>integration-test</goal>
        <goal>verify</goal>
      </goals>
    </execution>
  </executions>
  <configuration>
    <failIfNoTests>true</failIfNoTests>
    <suiteXmlFiles>
      <suiteXmlFile>src/test/resources/mySuite.xml</suiteXmlFile>
    </suiteXmlFiles>
    <dependenciesToScan>
      <dependency>${test.library.groupId}:${test.library.artifactId}  </dependency>
    </dependenciesToScan>
  </configuration>
</plugin>

因为调试输出没有显示任何类型的配置,这表示了您在配置(dependenciesToScan)中所写的内容。

票数 1
EN

Stack Overflow用户

发布于 2018-02-02 16:39:29

我也遇到了同样的问题。尝试使用dependenciesToScan特性从jar中运行测试。我配置的maven pom.xml也有<packaging>pom</packaging>

在运行mvn verify -x时,我得到了以下堆栈跟踪:

代码语言:javascript
复制
Caused by: org.apache.maven.plugin.MojoFailureException: No tests to run!
    at org.apache.maven.plugin.failsafe.VerifyMojo.verifyParameters (VerifyMojo.java:225)

查看org.apache.maven.plugin.failsafe.VerifyMojo的源代码

代码语言:javascript
复制
if ( !getTestClassesDirectory().exists() )
{
    if ( getFailIfNoTests() != null && getFailIfNoTests() )
    {
        throw new MojoFailureException( "No tests to run!" );
    }
}

预期将存在测试源目录。

我首先创建了一个空文件夹target/empty-test-classes,然后将其添加到插件配置中,解决了这个问题:

代码语言:javascript
复制
<testClassesDirectory>${project.build.directory}/empty-test-classes</testClassesDirectory>

2013年开设了一个问题,并就如何解决这个问题提出了其他建议:https://issues.apache.org/jira/browse/SUREFIRE-1024

票数 1
EN

Stack Overflow用户

发布于 2017-08-23 22:04:51

避免为验证阶段启用failIfNoTests,为集成测试阶段启用它就足够了:

代码语言:javascript
复制
        <plugin>
            <artifactId>maven-failsafe-plugin</artifactId>
            <executions>
                <execution>
                    <id>default</id>
                    <goals>
                        <goal>integration-test</goal>
                    </goals>
                    <phase>integration-test</phase>
                    <configuration>
                        <failIfNoTests>true</failIfNoTests>
                    </configuration>
                </execution>
                <execution>
                    <id>verify</id>
                    <phase>verify</phase>
                    <goals>
                        <goal>verify</goal>
                    </goals>
                </execution>
            </executions>
            <configuration>
                <dependenciesToScan>
                    <dependency>${project.groupId}:cms-it</dependency>
                </dependenciesToScan>
            </configuration>
        </plugin>
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/29050477

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档