【问题标题】:How to write integration tests for Rest Service API in spock如何在 spock 中为 Rest Service API 编写集成测试
【发布时间】:2018-09-17 10:07:22
【问题描述】:

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

例如:

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

我想对此 API 进行正确的集成测试,即在测试时我想使用 path 调用此方法,但不使用方法名称

【问题讨论】:

  • 请提供完全可重现的测试用例 (MCVE) 以获得有关 StackOverflow 的帮助。请至少显示一个完整的 Spock 测试和该测试所涉及的所有类的源代码。 P.S.:你真的用你不合格的问题淹没了 SO。没有冒犯的意思,我想帮助你,我相信其他人也会这样做。但是根据“垃圾进垃圾出”的原则,写得不好的问题不会得到任何好的答案。

标签: java rest spock


【解决方案1】:

查看他们网站上的 Spring 指南: Testing Web Layer

【讨论】:

  • 欢迎您,乔纳斯。请注意,主要由链接组成的答案在 SO 上不被认为是可以的。一个好的答案应该真正解决原始发布者的问题并解释如何以及为什么。链接很好,但仅供参考。
【解决方案2】:

正如您明确要求 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 中完成。

【讨论】:

    【解决方案3】:

    这对我有用

    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/'
        }
    }
    

    【讨论】:

      猜你喜欢
      • 2021-01-27
      • 2014-04-13
      • 1970-01-01
      • 1970-01-01
      • 2022-06-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-11-18
      相关资源
      最近更新 更多