背景

上一篇文章简单学习了 Junit 单元测试语法,有一种情况是多个测试用例测试同一个类或者方法,因此需要参数化测试。

参考:https://stackoverflow.com/questions/4399881/parameterized-unit-tests-in-scala-with-junit4
在 Scala 中使用 JUnit 参数化测试比较坑,因此记录一个测试用例。

📢 主要步骤:

  • 步骤一: 指定定参数运行器

  • 步骤二:声明变量

  • 步骤三:为测试类声明一个带有参数的公共构造函数,为变量赋值

  • 步骤四:为测试类声明一个使用注解 org.junit.runners.Parameterized.Parameters 修饰的,返回值为 java.util.Collection 的公共静态方法,并在此方法中初始化所有需要测试的参数对

    • 该方法必须由Parameters注解修饰
    • 该方法必须为public static的
    • 该方法必须返回Collection类型
    • 该方法的名字不做要求
    • 该方法没有参数
  • 步骤五:编写测试方法,使用自定义变量进行测试

用例

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
import com.bizseer.hubble.quoridor.config.TaskConfig
import com.bizseer.hubble.quoridor.core.Quoridor
import com.bizseer.hubble.quoridor.util.Utils.parseDatetime
import com.bizseer.hubble.quoridor.instance.{AlertEvent, ModelInstance}
import com.bizseer.hubble.quoridor.io.{GraphReader, ModelReader}
import org.junit.{Assert, Test}
import org.junit.runner.RunWith
import org.junit.runners.Parameterized

import java.util
import java.util.UUID

@RunWith(value = classOf[Parameterized])
class TestCases(time: String, events: Vector[(String, Int)], result: String) {

@Test
def testCase(): Unit = {
Assert.assertEquals(
result,
executeTestCase(this.time, this.events)
)
}

def executeTestCase(time: String, events: Seq[(String, Int)]): String = {
***
}

}

object TestCases {
@Parameterized.Parameters
def CASES: java.util.Collection[Array[AnyRef]] = {
val cases = new util.ArrayList[Array[AnyRef]]()

cases.add(
Array(
"2022-01-27 17:05:00",
Vector(
("sys_0002", 5)
),
"sys_0002"
)
)

//cases.add(
// Array(
// "2022-01-24 17:05:00",
// Vector(
// ("sys_0002.tran_0003", 5)
// ),
// "sys_0002.tran_0003"
// )
//)

cases
}
}