单元测试 – Scala中的参数化单元测试(使用JUnit4)
发布时间:2020-12-16 19:17:23 所属栏目:安全 来源:网络整理
导读:有没有办法用 Scala实现参数化单元测试?目前我在其余的程序中使用JUnit4,我想继续只使用“标准”API. 我找到了一个Junit4 with Groovy的例子,但我在定义静态部件时遇到了问题.可能是因为我对Scala也很新:-) 我现在和我一样迷人 import org.junit.Testimport
有没有办法用
Scala实现参数化单元测试?目前我在其余的程序中使用JUnit4,我想继续只使用“标准”API.
我找到了一个Junit4 with Groovy的例子,但我在定义静态部件时遇到了问题.可能是因为我对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() = { } 解决方法
这真是令人讨厌,但它确实有效.我发现的两件重要事情:伴侣对象必须在测试类之后,返回参数的函数必须返回AnyRef(或Object)数组的集合. Any的数组不起作用.这就是我使用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 (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |