【问题标题】:Maven reports it ran the test suite but did not run any of my JUnit testsMaven 报告它运行了测试套件,但没有运行我的任何 JUnit 测试
【发布时间】:2016-10-14 07:58:26
【问题描述】:

我正在尝试使用 JUnit 从 Maven 测试 Java 应用程序。

我有以下 POM(仅限相关部分)。

<plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-surefire-plugin</artifactId>
                <dependencies>
                    <dependency>
                        <groupId>org.apache.maven.surefire</groupId>
                        <artifactId>surefire-junit4</artifactId>
                        <version>2.7.2</version>
                    </dependency>
                </dependencies>
                <configuration>
                    <includes>
                        <include>**/*Test.java</include>
                    </includes>
                </configuration>
  </plugin>

似乎“某事”正在运行。这是“mvn -X test”的输出:

Running TestSuite
Tests run: 0, Failures: 0, Errors: 0, Skipped: 0, Time elapsed: 0.769 sec

Results :


Tests run: 0, Failures: 0, Errors: 0, Skipped: 0

注意“正在运行的测试套件”。但是它仍然找不到我的测试方法。我怀疑这可能与此有关:

[DEBUG] Adding to surefire test classpath: /home/julien/.m2/repository/org/apache/maven/surefire/surefire-testng/2.4.3/surefire-testng-2.4.3.jar
[DEBUG] Adding to surefire test classpath: /home/julien/.m2/repository/org/apache/maven/maven-artifact/2.0/maven-artifact-2.0.jar
[DEBUG] Adding to surefire test classpath: /home/julien/.m2/repository/org/codehaus/plexus/plexus-utils/1.0.4/plexus-utils-1.0.4.jar
[DEBUG] Adding to surefire test classpath: /home/julien/.m2/repository/junit/junit/3.8.1/junit-3.8.1.jar
[DEBUG] Adding to surefire test classpath: /home/julien/.m2/repository/org/apache/maven/surefire/surefire-api/2.4.3/surefire-api-2.4.3.jar

它说它正在使用 3.8.1 版的 Junit...

但它继续说:

测试类路径:

 [DEBUG]   /home/julien/.m2/repository/junit/junit/4.8.2/junit-4.8.2.jar

我想知道“surefire test classpath”和“Test classpath”有什么区别?

这是我的测试方法的命名和注释方式:

 @Test
    public void test() {

...

它位于这里:

src/test/java/com/cheetah/web/pages

知道我做错了什么吗?

这是有效的 POM:

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
  <modelVersion>4.0.0</modelVersion>
  <parent>
    <artifactId>cheetah</artifactId>
    <groupId>com.cheetah</groupId>
    <version>1.0-SNAPSHOT</version>
  </parent>
  <groupId>com.cheetah</groupId>
  <artifactId>cheetah-web</artifactId>
  <version>1.0-SNAPSHOT</version>
  <packaging>war</packaging>
  <name>cheetah-web</name>
  <build>
    <sourceDirectory>/home/julien/Documents/donnees/projets/site-emploi-finance/java/cheetah/web/src/main/java</sourceDirectory>
    <scriptSourceDirectory>src/main/scripts</scriptSourceDirectory>
    <testSourceDirectory>/home/julien/Documents/donnees/projets/site-emploi-finance/java/cheetah/web/src/test/java</testSourceDirectory>
    <outputDirectory>/home/julien/Documents/donnees/projets/site-emploi-finance/java/cheetah/web/target/classes</outputDirectory>
    <testOutputDirectory>/home/julien/Documents/donnees/projets/site-emploi-finance/java/cheetah/web/target/test-classes</testOutputDirectory>
    <resources>
      <resource>
        <mergeId>resource-2</mergeId>
        <directory>/home/julien/Documents/donnees/projets/site-emploi-finance/java/cheetah/web/src/main/java</directory>
        <includes>
          <include>**/*.tml</include>
          <include>**/*.properties</include>
        </includes>
      </resource>
      <resource>
        <mergeId>resource-3</mergeId>
        <directory>/home/julien/Documents/donnees/projets/site-emploi-finance/java/cheetah/web/src/main/resources</directory>
        <includes>
          <include>**/*.xml</include>
          <include>**/*.properties</include>
        </includes>
      </resource>
    </resources>
    <testResources>
      <testResource>
        <mergeId>resource-1</mergeId>
        <directory>/home/julien/Documents/donnees/projets/site-emploi-finance/java/cheetah/web/src/test/resources</directory>
      </testResource>
    </testResources>
    <directory>/home/julien/Documents/donnees/projets/site-emploi-finance/java/cheetah/web/target</directory>
    <finalName>cheetah-web-1.0-SNAPSHOT</finalName>
    <pluginManagement>
      <plugins>
        <plugin>
          <artifactId>maven-antrun-plugin</artifactId>
          <version>1.3</version>
        </plugin>
        <plugin>
          <artifactId>maven-assembly-plugin</artifactId>
          <version>2.2-beta-4</version>
        </plugin>
        <plugin>
          <artifactId>maven-clean-plugin</artifactId>
          <version>2.3</version>
        </plugin>
        <plugin>
          <artifactId>maven-compiler-plugin</artifactId>
          <version>2.0.2</version>
        </plugin>
        <plugin>
          <artifactId>maven-dependency-plugin</artifactId>
          <version>2.1</version>
        </plugin>
        <plugin>
          <artifactId>maven-deploy-plugin</artifactId>
          <version>2.4</version>
        </plugin>
        <plugin>
          <artifactId>maven-ear-plugin</artifactId>
          <version>2.3.2</version>
        </plugin>
        <plugin>
          <artifactId>maven-ejb-plugin</artifactId>
          <version>2.2</version>
        </plugin>
        <plugin>
          <artifactId>maven-install-plugin</artifactId>
          <version>2.3</version>
        </plugin>
        <plugin>
          <artifactId>maven-jar-plugin</artifactId>
          <version>2.2</version>
        </plugin>
        <plugin>
          <artifactId>maven-javadoc-plugin</artifactId>
          <version>2.5</version>
        </plugin>
        <plugin>
          <artifactId>maven-plugin-plugin</artifactId>
          <version>2.5</version>
        </plugin>
        <plugin>
          <artifactId>maven-rar-plugin</artifactId>
          <version>2.2</version>
        </plugin>
        <plugin>
          <artifactId>maven-release-plugin</artifactId>
          <version>2.0-beta-8</version>
        </plugin>
        <plugin>
          <artifactId>maven-resources-plugin</artifactId>
          <version>2.3</version>
        </plugin>
        <plugin>
          <artifactId>maven-site-plugin</artifactId>
          <version>2.0</version>
        </plugin>
        <plugin>
          <artifactId>maven-source-plugin</artifactId>
          <version>2.0.4</version>
        </plugin>
        <plugin>
          <artifactId>maven-surefire-plugin</artifactId>
          <version>2.4.3</version>
        </plugin>
        <plugin>
          <artifactId>maven-war-plugin</artifactId>
          <version>2.1-beta-1</version>
        </plugin>
      </plugins>
    </pluginManagement>
    <plugins>
      <plugin>
        <artifactId>maven-compiler-plugin</artifactId>
        <version>2.0.2</version>
        <configuration>
          <source>1.6</source>
          <target>1.6</target>
        </configuration>
      </plugin>
      <plugin>
        <artifactId>maven-war-plugin</artifactId>
        <version>2.1-beta-1</version>
      </plugin>
      <plugin>
        <artifactId>maven-help-plugin</artifactId>
        <version>2.1.1</version>
      </plugin>
    </plugins>
  </build>
  <repositories>
    <repository>
      <id>java.net</id>
      <url>http://download.java.net/maven/1</url>
      <layout>legacy</layout>
    </repository>
    <repository>
      <id>maven2-repository.dev.java.net</id>
      <name>Java.net Repository for Maven</name>
      <url>http://download.java.net/maven/2</url>
    </repository>
    <repository>
      <id>jboss</id>
      <name>jboss</name>
      <url>http://repository.jboss.org/maven2/</url>
    </repository>
    <repository>
      <releases>
        <updatePolicy>never</updatePolicy>
      </releases>
      <snapshots>
        <updatePolicy>never</updatePolicy>
      </snapshots>
      <id>jboss-public-repository-group</id>
      <name>JBoss Public Maven Repository Group</name>
      <url>https://repository.jboss.org/nexus/content/groups/public-jboss/</url>
    </repository>
    <repository>
      <snapshots>
        <enabled>false</enabled>
      </snapshots>
      <id>central</id>
      <name>Maven Repository Switchboard</name>
      <url>http://repo1.maven.org/maven2</url>
    </repository>
  </repositories>
  <pluginRepositories>
    <pluginRepository>
      <releases>
        <updatePolicy>never</updatePolicy>
      </releases>
      <snapshots>
        <updatePolicy>never</updatePolicy>
      </snapshots>
      <id>jboss-public-repository-group</id>
      <name>JBoss Public Maven Repository Group</name>
      <url>https://repository.jboss.org/nexus/content/groups/public-jboss/</url>
    </pluginRepository>
    <pluginRepository>
      <releases>
        <updatePolicy>never</updatePolicy>
      </releases>
      <snapshots>
        <enabled>false</enabled>
      </snapshots>
      <id>central</id>
      <name>Maven Plugin Repository</name>
      <url>http://repo1.maven.org/maven2</url>
    </pluginRepository>
  </pluginRepositories>
  <dependencies>
    <dependency>
      <groupId>com.cheetah</groupId>
      <artifactId>cheetah-domain</artifactId>
      <version>1.0-SNAPSHOT</version>
    </dependency>
    <dependency>
      <groupId>com.cheetah</groupId>
      <artifactId>cheetah-service</artifactId>
      <version>1.0-SNAPSHOT</version>
    </dependency>
    <dependency>
      <groupId>org.apache.tapestry</groupId>
      <artifactId>tapestry-core</artifactId>
      <version>5.2.6</version>
    </dependency>
    <dependency>
      <groupId>org.apache.tapestry</groupId>
      <artifactId>tapestry-beanvalidator</artifactId>
      <version>5.2.6</version>
    </dependency>
    <dependency>
      <groupId>org.apache.tapestry</groupId>
      <artifactId>tapestry-spring</artifactId>
      <version>5.2.6</version>
    </dependency>
    <dependency>
      <groupId>org.apache.tapestry</groupId>
      <artifactId>tapestry-test</artifactId>
      <version>5.2.6</version>
      <scope>test</scope>
    </dependency>
    <dependency>
      <groupId>org.springframework</groupId>
      <artifactId>spring-test</artifactId>
      <version>3.0.5.RELEASE</version>
      <scope>test</scope>
    </dependency>
    <dependency>
      <groupId>org.easymock</groupId>
      <artifactId>easymock</artifactId>
      <version>2.5.2</version>
      <scope>test</scope>
    </dependency>
    <dependency>
      <groupId>javax</groupId>
      <artifactId>javaee-web-api</artifactId>
      <version>6.0</version>
      <scope>provided</scope>
    </dependency>
    <dependency>
      <groupId>junit</groupId>
      <artifactId>junit</artifactId>
      <version>4.8.2</version>
      <scope>test</scope>
    </dependency>
  </dependencies>
  <reporting>
    <outputDirectory>/home/julien/Documents/donnees/projets/site-emploi-finance/java/cheetah/web/target/site</outputDirectory>
  </reporting>
</project>

【问题讨论】:

  • 你的 pom 的工件类型是什么?
  • @crowne pom 用于父级,war 用于包含测试的那个。
  • 您可以尝试将 java 源代码和测试移动到带有 jar 包装的 java 模块中,然后查看测试如何从那里运行。然后可能将其保留在该结构中并将 java 模块作为依赖项添加到 war 项目。
  • 另外,我怀疑由于战争结构,Java 测试源的默认位置可能会以某种方式被覆盖。您也许可以找到可以在 pom 文件中设置的系统属性来指定它是什么。

标签: maven junit


【解决方案1】:

在 maven 中运行 junit 测试需要最少的设置。将 junit 添加到您的依赖项中:

<dependency>
    <groupId>junit</groupId>
    <artifactId>junit</artifactId>
    <version>4.7</version>
    <scope>test</scope>
</dependency>

在 src/test/java/com/cheetah/web/pages 中创建一个类:

public class FooTest {
    @Test
    public void writingToStdOut_succeeds() throws Exception {
        System.out.println("I work!");
    }
}

运行mvn test。就这样。无需在 surefire 插件中配置任何内容。战争项目与 jar 项目没有什么不同。如果你做了这两件事但它不起作用,那么其他地方的配置有误,我们可能需要查看整个 pom,或者更好的是,effective pom 来了解发生了什么。

请注意,Surefire 只会在同一版本中运行 testng 测试或 junit 测试,但不会同时运行。

【讨论】:

  • 瑞恩。谢谢。我删除了万无一失的配置。它仍然无法正常工作。我已经生成了有效的 POM,但仍然看不到它有什么问题......
  • @balteo: 要么发布你的 pom,也许使用 pastebin,或者按照我给出的步骤从一个新的 pom 开始,然后一次添加一些东西,直到你发现什么是破坏它。如果没有更多信息,我将无法提供更多帮助。
  • @balteo:除了我刚刚回顾了您的帖子,发现 testng 列在您的类路径中。你需要把它从那里弄出来。最后我检查了一下,surefire 只会运行 either testng 测试 junit 测试,但不会在同一个版本中运行。除非您在它们之间有其他类型的集成,否则您需要选择一个。
  • 嗨@RyanStewart 我处于它不起作用的情况。我如何在此处发布整个 POM?我正在做一个相当大的项目,它有很多模块。我正在专门研究一个模块,所以您需要我让您看到哪个 POM?非常感谢
  • 问题是错误的导入。我使用了org.junit.Testorg.testng.annotations.Test 的意图,所以我反复收到错误。无论如何,谢谢你;-)
【解决方案2】:

只是提到每个人都已经知道的事情,但是 仍然 时不时地让我抓狂。请记住,对于将“看到”的测试有一个命名约定,如果您没有正确命名测试类,它将被忽略。

运行

mvn -X test

向我们展示(修剪):

[DEBUG] Configuring mojo 'org.apache.maven.plugins:maven-surefire-plugin:2.19.1:test' with basic configurator -->
[DEBUG]   (s) additionalClasspathElements = []
...
[DEBUG]   (s) excludes = [**/Abstract*.java]
[DEBUG]   (s) includes = [**/*Tests.java, **/*Test.java]

因此,默认情况下,只会选择以“Test.java”或“Tests.java”结尾的类。

【讨论】:

    【解决方案3】:

    在我的情况下,问题在于 Maven 版本依赖。我手动添加的,出错了。

    建议:

    您应该始终通过“插入依赖项”菜单添加依赖项。当您的光标在 xml 文件中的 &lt;dependency&gt;&lt;/dependency&gt; 之间时,可以使用快捷方式 "crtl"+"space" 显示它。当您在“Select Dependency”菜单中的“Enter...”文本框中输入“junit”并选择您的 junit 版本。单击“确定”后,您的依赖项将被自动添加。这有助于避免手动键入错误版本的问题。

    【讨论】:

      猜你喜欢
      • 2021-12-16
      • 2019-04-25
      • 2012-12-04
      • 2014-05-31
      • 1970-01-01
      • 2013-08-23
      • 1970-01-01
      • 1970-01-01
      • 2017-06-15
      相关资源
      最近更新 更多