Tôi muốn viết kiểm tra chức năng cho bộ điều khiển của mình trong PlayFramework. Để làm điều đó tôi muốn thử thực hiện một số lớp.Cách ghi đè mô-đun guice trong các bài kiểm tra đơn vị Playframework bằng cách sử dụng ScalaTest
tôi thấy ví dụ tốt đẹp như thế nào để làm điều đó bằng spec2 đây: http://www.innovaedge.com/2015/07/01/how-to-use-mocks-in-injected-objects-with-guiceplayscala/
Nhưng tôi đang sử dụng thử nghiệm scala với OneAppPerSuite
đặc điểm sử dụng FakeApplication. Dưới đây là tài liệu: https://www.playframework.com/documentation/2.4.x/ScalaFunctionalTestingWithScalaTest
Vấn đề là tôi không thể tìm thấy cách để chặn vào GuiceApplicationBuilder
và ghi đè một số ràng buộc với việc triển khai thử.
Dưới đây là FakeApplication
thực hiện từ play.api.test
:
case class FakeApplication(
override val path: java.io.File = new java.io.File("."),
override val classloader: ClassLoader = classOf[FakeApplication].getClassLoader,
additionalPlugins: Seq[String] = Nil,
withoutPlugins: Seq[String] = Nil,
additionalConfiguration: Map[String, _ <: Any] = Map.empty,
withGlobal: Option[play.api.GlobalSettings] = None,
withRoutes: PartialFunction[(String, String), Handler] = PartialFunction.empty) extends Application {
private val app: Application = new GuiceApplicationBuilder()
.in(Environment(path, classloader, Mode.Test))
.global(withGlobal.orNull)
.configure(additionalConfiguration)
.bindings(
bind[FakePluginsConfig] to FakePluginsConfig(additionalPlugins, withoutPlugins),
bind[FakeRouterConfig] to FakeRouterConfig(withRoutes))
.overrides(
bind[Plugins].toProvider[FakePluginsProvider],
bind[Router].toProvider[FakeRouterProvider])
.build
Vì vậy, không có cách nào cho tôi để đánh chặn thành GuiceApplicationBuilder
và ghi đè bindings.
Tôi là người mới chơi playframework nên xin lỗi nếu câu hỏi có vẻ ngớ ngẩn một chút. Cảm ơn!