10 测试 Ratpack 应用程序
测试在 Ratpack 中是头等公民。ratpack-test
库包含核心支持,而 ratpack-groovy-test
为这些类型提供了一些 Groovy 糖。
ratpack
和ratpack-groovy
Gradle 插件将这些库隐式添加到测试编译类路径中。
Ratpack 测试支持与使用的测试框架无关。任何框架都可以潜在使用。
许多 Ratpack 用户使用 Spock 测试框架。虽然 Spock 需要使用 Groovy 编写测试,但它可以轻松地用于有效地测试 Java 代码。
1.10 单元测试
1.1.10 RequestFixture
RequestFixture
类有助于创建模拟请求环境,表面上是为了测试 Handler
实现。但是,使用与其他组件(例如 Parser
实现)集成的请求夹具的临时处理程序也很常见。
注意:
GroovyRequestFixture
类提供了用于处理请求夹具的 Groovy 糖。
2.1.10 ExecHarness
ExecHarness
夹具有助于测试在应用程序之外利用 Ratpack 执行机制的代码。如果您需要对使用 Promise
的代码进行单元测试,则需要使用执行线束。
2.10 集成测试
Ratpack 集成测试是通过 HTTP 接口测试应用程序组件子集的测试。
EmbeddedApp
夹具有助于构建一个临时的应用程序,该应用程序会响应真实的 HTTP 请求。在集成测试的上下文中,它通常用于将特定组合的应用程序组件粘合在一起以进行测试。
由于它构建了一个真实的 Ratpack 应用程序,因此它也可以用于测试 Ratpack 扩展点的实现,例如 Renderer
、Parser
和 ConfigurableModule
。
EmbeddedApp
夹具管理启动和停止应用程序,以及提供一个 TestHttpClient
,该客户端向嵌入式应用程序发出请求。
重要的是,嵌入式应用程序必须在不再需要时关闭,以释放资源。EmbeddedApp
类型实现了 java.io.AutoCloseable
接口,该接口的 close()
方法可用于停止服务器。这通常可以与正在使用的测试框架的“测试后”生命周期事件相结合,例如 JUnit 的 @After
方法。
注意:
EmbeddedApp
夹具还可以“独立”用于在测试其他类型的非 Ratpack 应用程序时创建模拟 HTTP 服务。
3.10 功能测试
Ratpack 功能测试是通过 HTTP 接口测试整个应用程序的测试。
对于定义为 Java 主类的 Ratpack 应用程序,可以使用 MainClassApplicationUnderTest
夹具。对于定义为 Groovy 脚本的 Ratpack 应用程序,可以使用 GroovyRatpackMainApplicationUnderTest
夹具。
如果您有自定义入口点,则可以扩展 ServerBackedApplicationUnderTest
抽象超类以满足您的需求。
这些夹具管理启动和停止应用程序,以及提供一个 TestHttpClient
,该客户端向嵌入式应用程序发出请求。
重要的是,被测应用程序必须在不再需要时关闭,以释放资源。CloseableApplicationUnderTest
类型实现了 java.io.AutoCloseable
接口,该接口的 close()
方法可用于停止服务器。这通常可以与正在使用的测试框架的“测试后”生命周期事件相结合,例如 JUnit 的 @After
方法。
1.3.10 强加
Ratpack 提供了一种用于增强被测应用程序的可测试性的机制,称为 强加
。
通常,强加是通过子类化 MainClassApplicationUnderTest
或类似的类来指定的,并覆盖 addImpositions(ImpositionsSpec)
方法。
2.3.10 浏览器测试
浏览器测试的工作原理与以前称为功能测试的类似,只是使用 Ratpack 的 TestHttpClient
被浏览器自动化所取代。这通常涉及使用 MainClassApplicationUnderTest
启动和停止应用程序,并通过 getAddress()
方法提供被测应用程序的地址。
Ratpack 用户通常使用 Geb 进行浏览器测试,因为它具有表现力强的风格,并且与 Spock 的协同作用很好。ratpack.io
站点的 Ratpack/Geb 基于测试示例 可供参考。