Scala 游戏2.0中的存根控制器

Scala 游戏2.0中的存根控制器,scala,testing,mocking,playframework-2.0,stub,Scala,Testing,Mocking,Playframework 2.0,Stub,我正试着仿效他的例子,但不幸的是,我没有成功 我有一个使用UserModel的UsersController trait UserModel extends ModelCompanion[User, ObjectId] { // ... } 接下来是抽象控制器 abstract class UsersController extends Controller { val userModel: UserModel def sayHello = Action(parse.json)

我正试着仿效他的例子,但不幸的是,我没有成功

我有一个使用UserModel的UsersController

trait UserModel extends ModelCompanion[User, ObjectId] {
 // ...
}
接下来是抽象控制器

abstract class UsersController extends Controller {

  val userModel: UserModel

  def sayHello = Action(parse.json) { request =>
    // return a play Action. Doesn't use userModel
  }


  // Other methods

}
在routes文件中,我通过以下方式调用方法say Hello:

POST/hello controllers.Users.sayHello

在测试目录中,我使用UserModel模拟创建了UsersController的子类

package controllers

import org.specs2.mock.Mockito

object UserControllersTest extends UsersController with Mockito {
  val userModel = mock[models.UserModel]
}
现在,主要部分。我按照前面提到的页面中的示例创建了一个规范测试。在FakeApplication的pluing参数中,我包含了对UserControllersTest的调用

package controllers

import org.specs2.mutable.Specification

import play.api.libs.json.Json
import play.api.test._
import play.api.test.Helpers._

class UsersSayHelloSpec extends Specification {

  running(FakeApplication()) {

    "Users.SayHello" should {

      def sendJson(jsonMap: Map[String, String], shouldBeCorrect: Boolean) = {
        running(new FakeApplication(
          additionalPlugins = Seq("controllers.UserControllersTest"))) {
          // Preapration 
          val jsonRequisition = Json.toJson(jsonMap)
          val Some(result) = routeAndCall(FakeRequest(POST,
              "/hello",
              FakeHeaders(Map("Content-Type" -> Seq("application/json"))),
              jsonRequisition))

            // ...
        }
      }

      "Not process a empty String" in {
        sendJson(Map.empty[String, String], false)
      }

      // Other tests calling sendJson ...
    }

  }

}
但是,当我运行测试时,我收到以下错误消息:

[info] Users.SayHello should
[error] ! Not process a empty String
[error]     PlayException: Cannot load plugin [Plugin [controllers.UserControllersTest] cannot been instantiated.] (Application.scala:171)
...
[error] play.api.Application.<init>(Application.scala:158)
[error] play.api.test.FakeApplication.<init>(Fakes.scala:141)
[error] controllers.UsersSayHelloSpec$$anonfun$1$$anonfun$apply$5.sendJson$1(UsersSayHelloSpec.scala:20)
[error] controllers.UsersSayHelloSpec$$anonfun$1$$anonfun$apply$5$$anonfun$apply$26.apply(UsersSayHelloSpec.scala:46)
[error] controllers.UsersSayHelloSpec$$anonfun$1$$anonfun$apply$5$$anonfun$apply$26.apply(UsersSayHelloSpec.scala:46)
[info]Users.SayHello应该
[错误]!不处理空字符串
[错误]播放异常:无法加载插件[插件[controllers.UserControllersTest]无法实例化。](Application.scala:171)
...
[错误]play.api.Application.(Application.scala:158)
[错误]play.api.test.FakeApplication.(Fakes.scala:141)
[错误]controllers.userssayHellosec$$anonfun$1$$anonfun$apply$5.sendJson$1(userssayHellosec.scala:20)
[错误]controllers.UsersSayHelloSpec$$anonfun$1$$anonfun$apply$5$$anonfun$apply$26.apply(UsersSayHelloSpec.scala:46)
[错误]controllers.UsersSayHelloSpec$$anonfun$1$$anonfun$apply$5$$anonfun$apply$26.apply(UsersSayHelloSpec.scala:46)
其中UsersSayHelloSpec.scala:20引用我调用running方法的行


所以我的问题是:我做错了什么?

我不确定你到底想做什么,但问题“我做错了什么?”的答案是:

参数“additionalPlugins”用于其他播放插件,“controllers.UserControllersTest”不是播放插件。这是一个控制器

您可以在此处阅读有关Play 2插件的内容:


你试过这些例子吗?

ygra:感谢你澄清我对FakeApplication插件的误解。我在这里重新提出这个问题: