Scala 无法在测试运行中使用更改播放插件(fakeApp)
我试图用不同的模拟插件代替真实的插件进行测试。它可以使用一个mock,但是当我有两个mock时,它总是使用第一个mockScala 无法在测试运行中使用更改播放插件(fakeApp),scala,playframework-2.3,Scala,Playframework 2.3,我试图用不同的模拟插件代替真实的插件进行测试。它可以使用一个mock,但是当我有两个mock时,它总是使用第一个mock class UserSpec extends Specification { "User" should { val fakeAppA = new FakeApplication( additionalPlugins = Seq( "FakeServiceA" ) ) "have FakeServi
class UserSpec extends Specification {
"User" should {
val fakeAppA = new FakeApplication(
additionalPlugins = Seq(
"FakeServiceA"
)
)
"have FakeServiceA " in running(fakeAppA) {
UserController.doit() === "FakeServiceA"
}
val fakeAppB = new FakeApplication(
additionalPlugins = Seq(
"FakeServiceB"
)
)
"have FakeServiceB" in running(fakeAppB) {
// doesnt work gets FakeServiceA
UserController.doit() === "FakeServiceB"
}
}
}
object UserController extends Controller {
val service = Play.application.plugin[Service]
.getOrElse(throw new RuntimeException("Service not loaded"))
def doit() = service.serviceIt()
}
class Service(app: Application) extends Plugin {
def serviceIt(): String = "Service"
}
class FakeServiceA(app: Application) extends Service(app) {
override def serviceIt(): String = "FakeServiceA"
}
class FakeServiceB(app: Application) extends Service(app) {
override def serviceIt(): String = "FakeServiceB"
}
不会为每个测试重新创建控制器,因为它是scala对象。因此,您应该通过def而不是val引用插件
object UserController extends Controller {
- val service = Play.application.plugin[Service]
+ def service = Play.application.plugin[Service]
.getOrElse(throw new RuntimeException("Service not loaded"))
您可能可以发布
UserController
的代码以使其更清晰。你也可以接受自己的答案。