我想從Mock Objects in Play[2.0]以下的例子,但不幸的是我沒有成功。Play 2.0中的存根控制器
我有一個UsersController使用UserModel。
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文件,我把方法問好這樣:
POST /你好controllers.Users.sayHello
在測試目錄中,我使用UserMode創建了UsersController的子類我嘲笑。
package controllers
import org.specs2.mock.Mockito
object UserControllersTest extends UsersController with Mockito {
val userModel = mock[models.UserModel]
}
現在,主要部分。我在之前提到的頁面中按照Jacob Groundwater示例創建了一個Spec測試。在爲FakeApplication插入參數時,我包含了對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)
其中UsersSayHelloSpec.scala:20個referes到行,我調用運行方法。
所以我的問題是:我做錯了什麼?
ygra:感謝澄清我對FakeApplication插件的誤解。我重新在這裏的問題:http://stackoverflow.com/questions/13302657/play-2-0-fakeapplication-calling-a-stub-controller-instead-real-one –