4

我刚刚JUnit按照示例使用 4.11 实现了一个 JUnit 测试用例:

https://github.com/junit-team/junit/blob/master/doc/ReleaseNotes4.11.md#example-1

我使用创建一个 Maven 项目

<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>
    <groupId>com.yyt</groupId>
    <artifactId>example</artifactId>
    <version>0.0.1-SNAPSHOT</version>

    <dependencies>
        <dependency>
            <groupId>junit</groupId>
            <artifactId>junit</artifactId>
            <version>4.11</version>
            <scope>test</scope>
        </dependency>         
    </dependencies>

</project>

而这个测试用例:

import java.util.Arrays;

import org.junit.Assert;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.junit.runners.Parameterized;
import org.junit.runners.Parameterized.Parameters;

@RunWith(Parameterized.class)
public class Example {

    @Parameters(name = "{index}: fib({0})={1}")
      public static Iterable<Object[]> data() {
        return Arrays.asList(new Object[][] { { 0, 0 }, { 1, 1 }, { 2, 1 },
          { 3, 2 }, { 4, 3 }, { 5, 5 }, { 6, 8 } });
      }

    private int input;
    private int expected;

    public Example(int input, int expected) {
      this.input = input;
      this.expected = expected;
    }

    @Test
      public void test() {
      }
}

但是当我使用 测试它时mvn test,maven 说:

-------------------------------------------------------
 T E S T S
-------------------------------------------------------
There are no tests to run.

如何让它发挥作用?

4

4 回答 4

10

问题是基于maven-surefire-plugin的 maven 的命名约定, 它需要像Test.javaTest .javaTestCase*.java这样的命名来进行单元测试。对于集成测试,maven-failsafe-plugin负责它具有命名约定IT*.java*IT.java*ITCase.java

于 2013-03-01T15:16:34.740 回答
1

@khmarbaise在这种情况下成功了,但是......

有时你来这里冒险是因为

  • Maven 和 Eclipse 都告诉你你的班级没有测试
  • 清楚地知道;并且名副其实
  • 这两个工具似乎都找到了正确的类并尝试在那里执行测试
  • 你开始怀疑 Maven 和 Parameterized 是否一起工作,这个问题的标题听起来很有希望

如果满足上面列出的相关条件,您的 Maven 输出应该按照以下方式说明:

-------------------------------------------------------
 T E S T S
-------------------------------------------------------
Running your.maven.properly.named.SomeTest
Tests run: 0, Failures: 0, Errors: 0, Skipped: 0, Time elapsed: 7.684 sec

Results :

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

[INFO] ------------------------------------------------------------------------
[ERROR] BUILD FAILURE
[INFO] ------------------------------------------------------------------------
[INFO] No tests were executed!  (Set -DfailIfNoTests=false to ignore this error.)

如果是这样,我的建议是:尝试查看用于获取数据的任何内容是否实际返回任何内容。换句话说:看看用@Parameters. 如果没有数据,您的测试将无法运行。

于 2013-08-26T18:37:56.650 回答
1

陷入同样的​​问题。在 junit https://github.com/junit-team/junit4/issues/664中发现了这个(仍然)未解决的问题。所以,现在没有办法让它工作。

于 2016-09-27T16:00:02.207 回答
0

我知道的唯一解决方案 - 是运行整个课程,而不是课堂测试。

前有效:

mvn clean -Dtest=ExampleClassTest test

前不起作用:

mvn clean -Dtest=ExampleClassTest#test test

但要小心,类中的所有测试都将使用参数运行!

于 2021-06-10T13:01:33.270 回答