我尝试将Scala / Play项目升级到Play 2.7,Scala 2.12.11,Specs2 4.5.1。
在该项目中,从规范2的规范结构的意义上讲,我无法理解以下规范2的测试(可能是自编写测试以来,规范2 API发生了很大变化。]]
[当我查看当前API中的structure of specifications时,看不到is
方法与should
组合在一起的任何示例。
这应该是什么意思?
如何在当前的Specs2 API中重写这样的规范?
[我还注意到测试代码使用import org.specs2.mutable.Specification
,而不是在使用import org.specs2.Specification
方法时应该使用的is
。并且它使用def is(implicit ee: ExecutionEnv)
,而不是def is
。
这是旧的测试:
package services import org.specs2.concurrent.ExecutionEnv import org.specs2.mutable.Specification import org.specs2.specification.mutable.ExecutionEnvironment import play.api.inject.guice.GuiceApplicationBuilder import play.api.test.WithApplication import play.modules.reactivemongo._ import scala.concurrent.duration._ class StatisticsServiceSpec() extends Specification with ExecutionEnvironment { def is(implicit ee: ExecutionEnv) = { "The StatisticsService" should { "compute and publish statistics" in new WithApplication() { val repository = new MongoStatisticsRepository(configuredAppBuilder.injector.instanceOf[ReactiveMongoApi]) val wsTwitterService = new WSTwitterService val service = new DefaultStatisticsService(repository, wsTwitterService) val f = service.createUserStatistics("elmanu") f must beEqualTo(()).await(retries = 0, timeout = 5.seconds) } } def configuredAppBuilder = { import scala.collection.JavaConversions.iterableAsScalaIterable val env = play.api.Environment.simple(mode = play.api.Mode.Test) val config = play.api.Configuration.load(env) val modules = config.getStringList("play.modules.enabled").fold( List.empty[String])(l => iterableAsScalaIterable(l).toList) new GuiceApplicationBuilder(). configure("play.modules.enabled" -> (modules :+ "play.modules.reactivemongo.ReactiveMongoModule")).build } } }
为了简化代码以简化为实际的Specs2 API,我认为可以将其简化为以下形式:
package services import org.specs2.concurrent.ExecutionEnv import org.specs2.mutable.Specification import scala.concurrent.Future import play.api.test.WithApplication import scala.concurrent.duration._ class StatisticsServiceSpec(implicit ee: ExecutionEnv) extends Specification /* with ExecutionEnvironment */ { def is(implicit ee: ExecutionEnv) = { "The StatisticsService" should { "compute and publish statistics" in new WithApplication() { val f = Future(1) f must beEqualTo(1).await(retries = 0, timeout = 5.seconds) } } } }
请注意,我删除了
ExecutionEnvironment
特性,因为它似乎已从库中删除。
现在,代码终于可以编译了,但是当我尝试运行测试时,没有错误,但是实际上没有测试在运行:输出为Empty test suite.
我尝试将Scala / Play项目升级到Play 2.7,Scala 2.12.11,Specs2 4.5.1。在该项目中,有以下Specs2测试,就其Specs2规范而言,我无法理解...
新规范应该是