如何将参数传递到Scala(TDD测试)中的测试类



我正在尝试在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
  }
}

最新更新