Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/rest/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何在spock中编写Rest服务API的集成测试_Java_Rest_Spock - Fatal编程技术网

Java 如何在spock中编写Rest服务API的集成测试

Java 如何在spock中编写Rest服务API的集成测试,java,rest,spock,Java,Rest,Spock,我有一个包含API方法的Java类 例: 我想对该API进行正确的集成测试,即在测试时,我想使用路径调用此方法,但不使用方法名称查看他们网站上的Spring指南: 当您明确要求Spock时:以下是我对ApiSpec的标准实现: @SpringBootTest(webEnvironment = RANDOM_PORT) abstract class AbstractServiceSpec extends Specification { protected final static Res

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

例:


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

查看他们网站上的Spring指南:
当您明确要求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
    }
}
请注意,
restestclient
是我自己对OkHttp的包装。当然,您可以使用手头的任何HTTP客户机

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

一般来说,这是一本很好的读物,正如您在示例中所看到的,大部分内容都可以在Spock和JUnit中完成。

这对我很有用

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/'
    }
}
import com.charter.aesd.testcommons.rest规范
导入groovyx.net.http.HttpResponseDecorator
类TestIT扩展了rest规范{
def BASE_URL=“/test”
def“获取测试”(){
什么时候:
HttpResponseDecorator response=getRestClient().get([path:$BASE_URL“+”/123“]))
然后:
response.status>=200&&response.status<400
}
@凌驾
字符串getBaseUrl(){
返回'http://localhost:8889/'
}
}

请提供一个完全可复制的测试用例(),以便获得有关StackOverflow的帮助。请至少展示一个完整的Spock测试和测试中涉及的所有类的源代码。旁白:你的无保留问题真是太多了。无意冒犯,我想帮助你,我相信其他人也一样。但是根据“垃圾输入,垃圾输出”的原则,写得不好的问题你不会得到任何好的答案。欢迎来到这里,乔纳斯。请注意,主要由链接组成的答案在这里不被认为是正确的。一个好的答案应该真正解决原始海报的问题,并解释如何以及为什么。链接很好,但仅用于进一步的信息。
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/'
    }
}