我想用 SCIO JobTest 和 Scala Test 进行参数化测试。我使用 TableDrivenPropertyChecks,它允许通过 aa forAll 进行参数化测试。
import org.scalatest.prop.TableDrivenPropertyChecks.{forAll => forAllParams, _}
val jobArgs = Array(
"--nullableCoders=true",
"--inputSubscription=in",
"--inputAvro=test",
"--outputBq1=out-table-1",
"--outputBq2=out-table-2"
)
}
val ioParams =
Table(
("description", "inputRawPlusData", "expectedDigitalAvatars", "expectedDataRecords"),
(
"Desc1",
getInputData1...,
getExpectedOutput1...,
getExpectedOutput2...
),
(
"Desc1",
getInputData2...,
getExpectedOutput...,
getExpectedOutput...
)
)
forAllParams(ioParams) { (description: String,
inputData: Seq[String],
expectedOutput1: Seq[...],
expectedOutput2: Seq[...]) =>
it should s"have $description..." in {
JobTest[com.Job.type]
.args(jobArgs: _ *)
.input(PubsubIO[String]("in"), inputData)
.input(AvroIO[GenericRecord]("test"), test)
.output(BigQueryIO[Obj1]("out-table-1"))(result => shouldMatchExpectedOutput1(result, expectedOutput1))
.output(BigQueryIO[Obj2]("out-table-2"))(result => shouldMatchExpectedOutput2(result, expectedOutput2))
.run()
}
}
对于第一组参数,测试工作正常,但对于第二组,Job args 变为空。我不明白为什么(也许是一个状态..)。
当我单独执行所有组参数时(单独和没有其他人),它可以工作。
为什么会有这种行为?
是否可以使用 SCIO JobTest 进行参数化测试?
提前感谢您的帮助。