首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >基于Spock的Jooby应用集成测试

基于Spock的Jooby应用集成测试
EN

Stack Overflow用户
提问于 2018-08-15 13:45:14
回答 1查看 169关注 0票数 0

我有一个非常简单的应用程序,它使用Jooby作为web框架。它的REST类如下所示

代码语言:javascript
复制
class Sandbox : Kooby ({
    path("/sandbox") {
        get {
            val environment = require(Config::class).getString("application.env")
            "Current environment: $environment"
        }

        get ("/:name") {
            val name = param("name")
            "Auto response $name"
        }
    }
})

我想为它编写集成测试。我的测试看起来是这样的。我使用spockrest-assured。问题是,我没有运行应用程序,并且希望使用某种嵌入式服务器或其他方式来运行它。怎么做?

我的简单测试如下

代码语言:javascript
复制
class SandboxTest extends Specification {

    def "check current environment"() {
        given:
            def request = given()
        when:
            def response = request.when().get("/sandbox")
        then:
            response.then().statusCode(200) // for now 404
    }
}
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-08-15 15:06:11

您需要在Spock中查找测试(或类)之前/之后的挂钩。在前面的钩子中,启动Jooby而不阻塞线程:

代码语言:javascript
复制
app.start("server.join=false")

在后钩中:

代码语言:javascript
复制
app.stop();

从未使用过史波克,但这里有一个用于Spek的小扩展方法

代码语言:javascript
复制
fun SpecBody.jooby(app: Jooby, body: SpecBody.() -> Unit) {
  beforeGroup {
    app.start("server.join=false")
  }

  body()

  afterGroup {
    app.stop()
  }
}

最后,从你的测试中:

代码语言:javascript
复制
@RunWith(JUnitPlatform::class)
object AppTest : Spek({
  jooby(App()) {
    describe("Get with query parameter") {
        given("queryParameter name=Kotlin") {
            it("should return Hello Kotlin!") {
                val name = "Kotlin"
                given()
                        .queryParam("name", name)
                        .`when`()
                        .get("/")
                        .then()
                        .assertThat()
                        .statusCode(Status.OK.value())
                        .extract()
                        .asString()
                        .let {
                            assertEquals(it, "Hello $name!")
                        }
            }
         ...
      ...
   ...
...

Maven Spek示例

Gradle Spek示例

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/51859945

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档