当前位置: 首页 > 知识库问答 >
问题:

如何更改功能测试的Guice绑定?

逑和蔼
2023-03-14

我正在开发一个Play(2.4版)应用程序,Guice是DI提供商。一切运行正常,但是我有一组使用ScalaTestPlus运行的功能测试,我想在测试运行时替换一些依赖项。这些测试是通过扩展OneServerPerSuite类来编写的,因为它们检查我的REST API。

在测试过程中是否有其他依赖关系?

编辑:示例代码:

样品控制器:

class UserController @Inject()(userService: UserService) extends AbstractController { ... }

和模块中的依赖定义:

bind(classOf[UserService]) to (classOf[ProdUserService])

我的测试是这样的:

class ApiTest extends PlaySpec with OneServerPerSuite {

    "User API should" must {
         "get User's data" in {
             (...) //calling to an endpoint and verifying response
         }
     }
}

我希望用其他实现取代ProdUserService,但只在测试中使用。

共有1个答案

宗政天逸
2023-03-14

这应该可以做到:

import play.api.test._
import play.api.test.Helpers._
import play.api.inject.bind
import play.api.Application
import play.api.inject.guice.GuiceApplicationBuilder
import database.AccountDAO
import play.api.Configuration
import play.api.Mode

class ApiTest extends PlaySpec with OneServerPerSuite {

 def app = new GuiceApplicationBuilder() // you create your app
        .configure(
          Configuration.from(
            Map( // a custom configuration for your tests only
              "slick.dbs.default.driver" -> "slick.driver.H2Driver$",
              "slick.dbs.default.db.driver" -> "org.h2.Driver",
              "slick.dbs.default.db.connectionPool" -> "disabled",
              "slick.dbs.default.db.keepAliveConnection" -> "true",
              "slick.dbs.default.db.url" -> "jdbc:h2:mem:test",
              "slick.dbs.default.db.user" -> "sa",
              "slick.dbs.default.db.password" -> "")))
        .bindings(bind[UserService].to[UserServiceImpl]) // here you can define your bindings for an actual implementation (note the use of square brackets)
        .in(Mode.Test)
        .build()


    "User API should" must {
         "get User's data" in new WithApplication(app) {
            // if you want to get the controller with everything injected
            val app2controller = Application.instanceCache[controllers.UserController]
            val userController = app2controller(app) // with this you get the controller with the service injected

             (...) //calling to an endpoint and verifying response
         }
     }
}
 类似资料:
  • 问题内容: 我让Google Guice负责连接对象。但是,如何测试绑定是否运作良好? 例如,假设我们有一个具有依赖性的类。如何测试B是否正确注入? 注意,这里没有方法,我想断言不是。 问题答案: 对于任何复杂的Guice项目,您都应该添加测试以确保可以使用这些模块来创建您的类。在您的示例中,如果B是Guice无法弄清楚如何创建的类型,则Guice将无法创建A。如果不需要A来启动服务器,但是当服务

  • 本文向大家介绍您如何进行功能测试?,包括了您如何进行功能测试?的使用技巧和注意事项,需要的朋友参考一下 功能测试 作为功能测试的一部分,应该对业务指定的所有用户要求进行良好的测试。功能测试要求在类似于客户要求的环境中进行测试。所有边界条件,负面情景都被考虑在内。应用程序的每个功能都应该可以很好地运行,并且不会出现任何错误。 功能测试的目的 应该测试运行良好的应用程序预期的基本要求。用户界面应易于使

  • 主要内容:功能测试的目标功能测试是软件测试的一个分支,旨在验证软件应用程序的功能,而不管功能是否根据需求规范运行。通过给出适当的输入值,确定输出并使用预期输出验证实际输出来测试每个功能。 功能测试包括通过GUI(图形用户界面),API(应用程序接口),安全性,数据库,客户端应用程序,服务器应用程序和应用程序功能进行测试。黑盒测试方法用于功能测试,其中测试内部逻辑的工作而不窥视内部代码。 功能测试的目标 功能测试的目标是检

  • 功能测试从用户的角度验证场景。它类似于验收测试。 但是它不是通过 HTTP 进行通信,而是填充环境,如(填充)POST 和 GET 参数, 然后直接在代码里执行 Application 实例。 功能测试通常比验收测试快,并且在失败时提供详细的堆栈跟踪。 根据老司机的经验,功能测试应该是首选的,除非有专门的 Web 服务器设置 或者由 JavaScript 构建的复杂 UI。 功能测试是借助于具有良

  • VBox中有两个按钮。如果单击第一个按钮,然后按“tab”,焦点框架将移动到第二个按钮。所以我的问题是,如果我想使用“tab”来实现其他功能,我该如何更改、取消或阻止JavaFX中默认的“tab”功能呢?

  • 我有一个maven项目和一个maven项目,它依赖于项目。每个项目都有一个Guice模块,将一些类绑定到接口。 在javaruntime中,是一个接口IElementFactory和一个类,该类通过构造函数注入获得IElementFactory: IElementFactory的具体实现在androidruntime项目中,称为AndroidElementFactory。其他接口的所有实现都在ja