【问题标题】:Parameterized Unit Tests in Scala (with JUnit4)Scala 中的参数化单元测试(使用 JUnit4)
【发布时间】:2011-05-22 22:36:41
【问题描述】:

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

我找到了Junit4 with Groovy 的示例,但我在定义static 部分时遇到了问题。可能是,因为我对 Scala 也很陌生 :-)

我现在也这么快

导入 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 { @Parameters 对象数据 { ... } @范围 ... @测试 def testFunction() = { }

【问题讨论】:

    标签: unit-testing scala junit junit4


    【解决方案1】:

    这很麻烦,但它确实有效。我发现了两件重要的事情:伴生对象必须在 测试类之后,返回参数的函数必须返回 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
    

    【讨论】:

    • 完美!很快就会试试看!
    • 我确实在伴随类之后定义了 Paraterized Class.. 但它显示错误:No public static parameters method on class 。知道为什么吗?
    【解决方案2】:

    使用 ScalaTest 或 Specs 可能会更好。后者绝对支持参数化测试,并在 Scala 社区中广泛使用。 JUnit 用于参数化测试的语法非常糟糕,并且它对静态声明的依赖不会使您在 Scala 中的任务更轻松(可能您需要一个伴随对象)。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-12-11
      • 1970-01-01
      • 2022-01-03
      • 2016-05-28
      • 1970-01-01
      • 2016-12-04
      相关资源
      最近更新 更多