Вы можете поместить все шаги ETL в определение (коллекцию) и запустить их
import org.scalatest.FunSpec
import com.github.mrpowers.spark.fast.tests.DataFrameComparer
import com.github.mrpowers.spark.daria.sql.SparkSessionExt._
import org.apache.spark.sql.types.{IntegerType, StringType}
describe("etl collection") {
it("can run etls that are organized in a map") {
val sourceDF = spark.createDF(
List(
("bob", 14),
("liz", 20)
), List(
("name", StringType, true),
("age", IntegerType, true)
)
)
val etlDefinition = new EtlDefinition(
name = "example",
sourceDF = sourceDF, // etl step 1
transform = someTransform(), // etl step 2
write = someWriter(), // etl step 3
hidden = false
)
val etls = scala.collection.mutable.Map[String, EtlDefinition]("example" -> etlDefinition)
etls += ("ex2" -> etlDefinition)
etls("example").process()
}
}
Другим вариантом может быть eventually
из scalatest. Небольшой пример для:
Post("/something", body) ~> routes ~> check {
response should be a pendingResponse
eventually {
Post("/something", body) ~> routes ~> check {
response should be a expectedResponse
}
}
}
И вместо Post вы можете вызвать какой-нибудь метод.
Вы можете здесь здесь и scalatest
ОБНОВЛЕНИЕ:
it ("your definition") {
eventually { Thread.sleep(50); step1() should be A // assertion }
eventually { Thread.sleep(50); step2() should be B }
eventually { Thread.sleep(50); step3() should be C }
}
вы можете сделать их вложенными, если вы sh