我有一个包含API方法的Java类
例如:
@GET
@Path("/{id}")
public Resposce getIds(@PathParam(name) String name) {
//some code here
}
我想对该API进行集成测试,即在测试时我想使用path
而不是方法名来调用此方法
答案 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/'
}
}