如何在Spock中编写Rest Service API的集成测试

时间:2018-09-17 10:07:22

标签: java rest spock

我有一个包含API方法的Java类

例如:

@GET
@Path("/{id}")
public Resposce getIds(@PathParam(name) String name) {
     //some code here 
}

我想对该API进行集成测试,即在测试时我想使用path而不是方法名来调用此方法

3 个答案:

答案 0 :(得分:1)

在其站点上查看Spring指南: Testing Web Layer

答案 1 :(得分:0)

您明确要求使用Spock时:这是我对ApiSpec的标准实现:

@SpringBootTest(webEnvironment = RANDOM_PORT)
abstract class AbstractServiceSpec extends Specification {

    protected final static RestTestClient api = new RestTestClient()

    @Value('http://localhost:${local.server.port}')
    String serviceUrl

    def setup() {
        api.baseUrl = serviceUrl
    }

    def "GET /health should return 200"() {
        expect:
        api.get("/health").code() == 200
    }
}

请注意,RestTestClient是我自己的OkHttp包装器。您当然可以使用任何HTTP客户端。

@SpringBootTest注释使Spring启动了整个服务。在执行测试时,该服务已完全启动并正在运行,您可以对API进行黑盒测试。

通常,Testing the Web Layer是一本不错的书,并且大部分内容(如您在示例中所见)可以在Spock和JUnit中完成。

答案 2 :(得分:0)

这对我有用

import com.charter.aesd.testcommons.RESTSpecification
import groovyx.net.http.HttpResponseDecorator


class TestIT extends RESTSpecification{

    def BASE_URL = "/test"
    def "Get test"(){
        when:
        HttpResponseDecorator response = getRestClient().get([path:"$BASE_URL"+"/123"])

        then:
            response.status >=200 && response.status < 400
    }

    @Override
    String getBaseUrl() {
        return 'http://localhost:8889/'
    }
}