【问题标题】:Play Framework 2.4.x - Override Guice BindingPlay Framework 2.4.x - 覆盖 Guice 绑定
【发布时间】:2016-05-10 16:28:03
【问题描述】:

我有几个测试用例,有一个测试用例我想测试通知不可用。我使用单独的GuiceInjectorBuilder 将通知服务实例注入(覆盖)到None 而不是通常的Some(DefaultNotificationService)

class MySpec extends PlaySpec with Results with OneAppPerSuite {
  def appController = Application.instanceCache[AppController].apply(app)

  // typical case
  "cancel an order" should {
      "return HTTP OK" in {        
        val result: Future[Result] = injector.instanceOf[AppController].cancel(1).apply(FakeRequest())
        status(result) mustEqual OK
        (contentAsJson(result) \ "message").as[String] mustEqual "Order no. 1 is cancelled"
      }
    }

    // exception case 
    "cancel an order but notification service is OUT" should {
      import play.api.inject.bind

      val injector = new GuiceInjectorBuilder()
        .bindings(new MockAppModule)
        .in(Mode.Test)
        .overrides(bind[Option[NotificationService]].toInstance(None))  // usually it is configured to Some(DefaultNotificaionService)
        .injector()

      "return HTTP Multi Status" in {
        val result: Future[Result] = injector.instanceOf[AppController].update(1).apply(FakeRequest())
        status(result) mustEqual MULTI_STATUS
        (contentAsJson(result) \ "message").as[String] mustEqual "Order no. 1 is cancelled but user does not know"
      }
    }

  ...
  }    

它不起作用,因为MockAppModule 依赖于 Play 在其启动生命周期中为该测试注入的其他模块。如何为MockAppModule 加载这些 Play 默认模块以用于此测试用例?有一个更好的方法吗?谢谢

【问题讨论】:

    标签: scala playframework guice


    【解决方案1】:

    如果您想在每个测试而不是每个套件中使用一个应用程序来执行此操作,您可以尝试像这样覆盖绑定(可能有与 newAppForTest() 等效的方法,每个套件使用一个应用程序来执行此操作):

    class MySpec extends PlaySpec with Results with GuiceOneAppPerTest {
    
    implicit override def newAppForTest(testData: TestData): Application = {
        GuiceApplicationBuilder()
            .overrides(bind[Option[NotificationService]].toInstance(None))  // usually it is configured to Some(DefaultNotificaionService)
            .build()
        }
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-09-30
      • 1970-01-01
      相关资源
      最近更新 更多