【问题标题】:Use of @Parameters annotation in junit 4.11-SNAPSHOTjunit 4.11-SNAPSHOT中@Parameters注解的使用
【发布时间】:2012-08-01 17:16:13
【问题描述】:

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

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

错误:未知注释参数名称:名称@Parameters(名称= "{0}") 定义数据: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"))
}

【问题讨论】:

  • 它可能使用不同的Parameters 类作为scala 中的注释。尝试完全限定类型,看看会发生什么。
  • 你导入的是相同/正确的Parameters注解吗?
  • 同一个注解类(org.junit.runners.Parameterized.Parameters)

标签: java scala junit


【解决方案1】:

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

试试

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

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

@Test(timeout = 10)

【讨论】:

  • 它对我来说编译得很好。不过,我不得不猜测您的 scala 版本和导入,而使用 2.9.2 重现您的问题的唯一方法是导入“org.junit.runners._”或“org.junit.runners.Parameterized”。也许您可以更新问题以包含导入。
  • 我已经添加了导入 - 似乎scalac解析参数化为junit-dep.jar和javac到maven下的junit.jar
【解决方案2】:

原来这里的问题是由于 junit-dep.jar 通过对 jMock 2.4.0 的暂时依赖而位于类路径上

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

【讨论】:

  • 另外,如果您问我,在使用参数化测试时,您应该使用定义的构造函数,其参数数量等于您的 Iterable ArrayList 的列大小。我注意到您在示例中没有这样做。你应该考虑一下。
猜你喜欢
  • 2014-04-14
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-03-03
  • 1970-01-01
  • 2014-04-07
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多