unit-testing - 如何在 Play 2.0 框架中为路由编写隔离单元测试?

标签 unit-testing playframework-2.0

我的 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/

相关文章:

delphi - 如何在 PascalMock 中模拟具有开放数组参数的方法?

java - 运行 Roboelectric 单元测试时出现 NoClassDefFoundError

unit-testing - CppUtest:如何从模拟函数返回自定义结构

java - 对于 Playframework 2.x 部署推荐的应用程序服务器是什么?

c# - 在 .Net 应用程序中包含单元测试时的设计注意事项?

spring - MapStruct 映射器未在 Spring 单元测试中注入(inject)

scala - 将 play 2.2 应用程序移植到 2.3.2 版本时出错 (Scala)

java - Play 2.0 并未运行所有测试

scala - 了解 Scala Play Actions 和 Futures

playframework - 在 Play 框架中,何时使用 Promise 来处理请求,何时不使用?