2

我想利用最新版本的 junit 中的新功能来命名我的参数化测试

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

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

导致此错误的实现有什么区别?

爪哇

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"))
}
4

2 回答 2

0

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

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

于 2012-08-02T02:54:42.420 回答
0

因为@Parameters 被定义为一个内部,你似乎需要给出全名。

尝试

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

至少,这是我在 @Parameters 和 @Test 的定义中可以观察到的唯一显着差异,这是有效的:

@Test(timeout = 10)
于 2012-08-01T17:58:10.443 回答