我的 play 框架应用程序是用 scala(不是 Java)编写的。我找到了一个页面,描述了如何使用实用程序类 play.test.Helpers 进行单元测试路由。该示例是用 Java 编写的,而不是 Scala。我在 scala 中编写了测试,但出现错误“消息:这不是 JavaAction,不能以这种方式调用。”
这是我找到的描述如何在 play framework 2.0 中对路由进行单元测试的页面:http://digitalsanctum.com/2012/05/28/play-framework-2-tutorial-testing/
...这是我尝试编写的用于测试我的应用程序的代码:
package conf
import org.scalatest._
import play.mvc.Result
import play.test.Helpers._
class routeTest extends FunSpec with ShouldMatchers {
describe("route tests") {
it("") {
// routeAndCall() fails. Message: This is not a JavaAction and can't be invoked this way.
val result = routeAndCall(fakeRequest(GET, "/"))
result should not be (null)
}
}
}
问题是因为我的操作是 Scala 而不是 Java 吗?我可以通过 Scala Controller 对我的路由进行单元测试吗?
最佳答案
您应该使用 play.api.*
从 Scala 代码导入。 play.*
是一个 Java api。所以你的代码应该是这样的:
package conf
import org.scalatest._
import org.scalatest.matchers._
import play.api._
import play.api.mvc._
import play.api.test.Helpers._
import play.api.test._
class routeTest extends FunSpec with ShouldMatchers {
describe("route tests") {
it("GET / should return result") {
val result = routeAndCall(FakeRequest(GET, "/"))
result should be ('defined)
}
}
}
或者使用 FlatSpec
更好:
package conf
import org.scalatest._
import org.scalatest.matchers._
import play.api._
import play.api.mvc._
import play.api.test.Helpers._
import play.api.test._
class routeTest extends FlatSpec with ShouldMatchers {
"GET /" should "return result" in {
val result = routeAndCall(FakeRequest(GET, "/"))
result should be ('defined)
}
it should "return OK" in {
val Some(result) = routeAndCall(FakeRequest(GET, "/"))
status(result) should be (OK)
}
}
此外,routeAndCall
不会返回 null。它返回 Option[Result]
,即 Some[Result]
或 None
,因此空值检查在这种情况下不起作用。
关于unit-testing - 如何在 Play 2.0 框架中为路由编写隔离单元测试?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14097110/