Unit testing Scala中的参数化单元测试(使用JUnit4)
有没有办法用Scala实现参数化单元测试?目前,我在其余程序中使用JUnit4,我希望继续只使用“标准”API 我找到了一个示例,但在定义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也很陌生:-)
我现在和你一样快
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类。但是它显示了错误:类上没有公共静态参数方法。
。知道为什么吗?