Unit testing Scala中的参数化单元测试(使用JUnit4)

Unit testing Scala中的参数化单元测试(使用JUnit4),unit-testing,scala,junit,junit4,Unit Testing,Scala,Junit,Junit4,有没有办法用Scala实现参数化单元测试?目前,我在其余程序中使用JUnit4,我希望继续只使用“标准”API 我找到了一个示例,但在定义静态部分时遇到了问题。可能是,因为我对Scala也很陌生:-) 我现在和你一样快 import org.junit.Test import org.junit.Assert._ import org.junit.runner.RunWith import org.junit.runners.Parameterized import org.junit.run

有没有办法用Scala实现参数化单元测试?目前,我在其余程序中使用JUnit4,我希望继续只使用“标准”API

我找到了一个示例,但在定义
静态部分时遇到了问题。可能是,因为我对Scala也很陌生:-)

我现在和你一样快

import org.junit.Test import org.junit.Assert._ import org.junit.runner.RunWith import org.junit.runners.Parameterized import org.junit.runners.Parameterized.Parameters @RunWith(classOf[Parameterized]) class MyTest extends junit.framework.TestCase { @Parameters object data { ... } @Parameter ... @Test def testFunction() = { } 导入org.junit.Test 导入org.junit.Assert_ 导入org.junit.runner.RunWith 导入org.junit.runners.Parameterized 导入org.junit.runners.Parameterized.Parameters @RunWith(classOf[参数化]) 类MyTest扩展了junit.framework.TestCase{ @参数对象数据{ ... } @参数。。。 @试验 def testFunction()={ }
使用ScalaTest或Spec可能会更好。后者肯定支持参数化测试,并且在Scala社区中广泛使用。JUnit用于参数化测试的语法非常糟糕,它对静态声明的依赖不会使您在Scala中的任务更容易(可能您需要一个伴生对象).

这很麻烦,但它可以工作。我发现了两件重要的事情:同伴对象必须在测试类之后出现,返回参数的函数必须返回AnyRef数组的集合(或对象)任何数组都无法工作。这就是我使用java.lang.Integer而不是Scala的Int的原因

import java.{util => ju, lang => jl}
import org.junit.Test
import org.junit.runner.RunWith
import org.junit.runners.Parameterized
import org.junit.runners.Parameterized.Parameters

@RunWith(value = classOf[Parameterized])
class JUnit4ParameterizedTest(number: jl.Integer) {
    @Test def pushTest = println("number: " + number)
}

// NOTE: Defined AFTER companion class to prevent:
// Class com.openmip.drm.JUnit4ParameterizedTest has no public
// constructor TestCase(String name) or TestCase()
object JUnit4ParameterizedTest {

    // NOTE: Must return collection of Array[AnyRef] (NOT Array[Any]).
    @Parameters def parameters: ju.Collection[Array[jl.Integer]] = {
        val list = new ju.ArrayList[Array[jl.Integer]]()
        (1 to 10).foreach(n => list.add(Array(n)))
        list
    }
}
输出应如预期的那样:

Process finished with exit code 0
number: 1
number: 2
number: 3
number: 4
number: 5
number: 6
number: 7
number: 8
number: 9
number: 10

太好了!很快就要试用了!我确实在同伴类之后定义了paraperized类。但是它显示了错误:
类上没有公共静态参数方法。
。知道为什么吗?