在junit 4.11-SNAPSHOT中使用@Parameters注释

时间:2012-08-01 17:16:14

标签: java scala junit

我想在junit的最新版本中使用新功能,以命名我的参数化测试

我有以下两个用java和& amp;写的测试。 scala,但scala测试会生成编译器错误:

  

错误:未知的注释参数名称:name @Parameters(name =   “{0}”)def数据:util.Collection [Array [AnyRef]] =   util.Arrays.asList(Array(“x”),Array(“y”),Array(“z”))

导致此错误的实施有何不同?

的java

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

import java.util.Arrays;
import java.util.Collection;

import static org.junit.Assert.fail;

@RunWith(Parameterized.class)
public class ParameterizedTest {
    @Parameters(name = "{0}")
    public static Collection<Object[]> data() {
        return Arrays.asList(new Object[]{"x"}, new Object[]{"y"}, new Object[]{"z"});
    }

    @Test
    public void foo() {
        fail("bar");
    }
}

import java.util
import org.junit.Assert._
import org.junit.Test
import org.junit.runner.RunWith
import org.junit.runners.Parameterized
import org.junit.runners.Parameterized._

@RunWith(classOf[Parameterized])
class ParameterizedScalaTest {
  @Test def foo() {
    fail("bar")
  }
}

object ParameterizedScalaTest {
  @Parameters(name = "{0}") def data: util.Collection[Array[AnyRef]] = util.Arrays.asList(Array("x"), Array("y"), Array("z"))
}

2 个答案:

答案 0 :(得分:0)

因为@Parameters被定义为内部,所以您似乎需要提供全名。

尝试

@Parameters(Parameters.name = "{0}")

至少,这是我在@Parameters和@Test的定义中可以观察到的唯一重要区别,这有效:

@Test(timeout = 10)

答案 1 :(得分:0)

事实证明这里的问题是由于junit-dep.jar通过对jMock 2.4.0的瞬态依赖而在类路径上

删除修复了编译器错误,奇怪这是scalac的问题而不是javac。