我正在尝试在Play Framework中的Scala操作中学习TDD方法。 以下是我写的用于读取数据库中给定ID的记录的控制器。
package controllers
import dao.EmployeeDAO
import javax.inject.Inject
import play.api.libs.json.Json
import play.api.mvc.{AbstractController, ControllerComponents}
import scala.concurrent.ExecutionContext.Implicits.global
class getController @Inject()(cc: ControllerComponents,variab: EmployeeDAO) extends AbstractController(cc) {
def get(id: Long) = Action.async { request =>
variab.getEmployeestructure(id).map { result =>
Ok(Json.toJson(result))
}
}
}
以下是测试文件。
package controllers
import org.scalatest.{FlatSpec, Matchers}
import scala.collection.mutable.Stack
import dao.EmployeeDAO
import play.api.mvc.ControllerComponents
class getControllertest(cc:getController) extends FlatSpec with Matchers{
var i=6
"getController" should "take ids which are present" in {
cc.get(id = i) should be (null)
}
}
当我编写测试文件而不将任何参数传递给getControllerTest时,正在执行测试。但是,当我传递任何参数时,测试不会执行。如何为此GetController类编写测试文件。
以下是build.sbt文件:
name := """play-scala-seed"""
organization := "com.example"
version := "1.0-SNAPSHOT"
lazy val root = (project in file(".")).enablePlugins(PlayScala)
scalaVersion := "2.11.12"
libraryDependencies += guice
//libraryDependencies += javaJdbc
libraryDependencies += cache
libraryDependencies += "com.typesafe" % "config" % "1.3.1"
libraryDependencies += "mysql" % "mysql-connector-java" % "5.1.34"
libraryDependencies += "com.typesafe.play" %% "play-slick" % "3.0.0"
libraryDependencies += "com.typesafe.play" %% "play-slick-evolutions" % "3.0.0"
libraryDependencies += "com.typesafe.play" %% "play-json" % "2.6.0"
libraryDependencies += "org.scalatestplus.play" %% "scalatestplus-play" % "3.1.2"
libraryDependencies += "mysql" % "mysql-connector-java" % "5.1.34"
libraryDependencies += "org.scalatest" %% "scalatest" % "3.0.8" % "test"
libraryDependencies += "com.novocode" % "junit-interface" % "0.11" % "test"
testOptions += Tests.Argument(TestFrameworks.JUnit, "-v")
我认为您想要这样的东西,希望它有帮助。
package controllers
import org.scalatest.{FlatSpec, Matchers}
import scala.collection.mutable.Stack
import dao.EmployeeDAO
import play.api.mvc.ControllerComponents
import org.scalatestplus.play.guice.GuiceOneAppPerSuite
import play.api.test.FakeRequest
import org.mockito.Mockito._
import org.scalatest.mockito.MockitoSugar
class getControllertest extends FlatSpec with Matchers with GuiceOneAppPerSuite with MockitoSugar {
private lazy val appBuilder: GuiceApplicationBuilder = new GuiceApplicationBuilder()
private lazy val injector: Injector = appBuilder.injector()
private val cc: ControllerComponents = injector.instanceOf[ControllerComponents]
private val mockedEmployeeDAO: EmployeeDao = mock[EmployeeDAO]
// var i = 6 don´t use vars
"getController" should "take ids which are present" in {
when(mockedEmployeeDao.get(6)).thenReturn(null)
val fakeRequest = FakeRequest(GET, s"/something")
.withHeaders(HOST -> "localhost:9000")
val controller= new getController(cc,mockedEmployeeDAO)// should be called SomethingController
val result = controller.get(6).apply(fakeRequest)
status(result) mustBe OK
contentAsJson(result) mustBe null // you probably need to tweek this part
}
}