我的测试用例使用Cassandra
数据库。我不希望测试用例并行运行,以避免实例化多个数据库连接。因此,我启动数据库一次,然后将连接实例传递给每个测试。我正在使用Sequential
中的Scalatest
按顺序运行测试-http://doc.scalatest.org/3.0.1-2.12/org/scalatest/Sequential.html
class RepositorySpecs extends PlaySpec with BeforeAndAfterAll{
val logger = LoggerFactory.getLogger(this.getClass.getName)
val embeddedCassandraManager = new EmbeddedCassandraManager()
override def afterAll():Unit = {
logger.trace("closing connection afterAll")
embeddedCassandraManager.closeCassandra()
}
"Repository Specs" should {
"run all specs" in {
val specs = Sequential(
new AnswersRepositorySpecs(embeddedCassandraManager),
new AnswersTransactionRepositorySpecs(embeddedCassandraManager),
new CassandraRepositorySpecs(embeddedCassandraManager),
new PartitionsOfATagRepositorySpecs(embeddedCassandraManager),
new PasswordRepositorySpecs(embeddedCassandraManager),
new PracticeQuestionsRepositorySpecs(embeddedCassandraManager),
new PracticeQuestionsTagsRepositorySpecs(embeddedCassandraManager),
new QuestionsAnsweredByAUserForATagSpecs(embeddedCassandraManager),
new QuestionsCreatedByAUserForATagSpecs(embeddedCassandraManager),
new SupportedTagsRepositorySpecs(embeddedCassandraManager),
new UserProfileAndPortfolioRepositorySpecs(embeddedCassandraManager),
new UsersRepositorySpecs(embeddedCassandraManager),
new UserTokenRepositorySpecs(embeddedCassandraManager)
)
for(spec<-specs.nestedSuites){
logger.trace(s"executing spec ${spec}")
spec.execute()
}
}
}
}
我是第一次使用Sequential
。
问题1)execute
是运行测试的正确方法吗?
问题2)我还注意到了run
方法。 run
比execute
好吗?
问题3)run
需要Args
,但我不知道如何实例化Args
。如何创建Args
?
问题4)如果有多个嵌套套件,每个套件都有多个测试,如果其中任何一个失败,execute
会停止吗? execute
返回Unit
。如何找出/哪个测试失败?