我希望我的泽西测试在tomcat的一个实例上运行,其余的服务在
运行 http://myhost:port/contexpath/service1/
http://myhost:port/contexpath/service2/
..so on
我同时拥有内存和外部容器依赖
[ group: 'org.glassfish.jersey.test-framework.providers', name: 'jersey-test-framework-provider-inmemory', version: '2.17'],
[group: 'org.glassfish.jersey.test-framework.providers', name: 'jersey-test-framework-provider-external' , version: '2.17'],
然后在测试中我骑过下面的方法来决定选择哪个容器
@Override
public TestContainerFactory getTestContainerFactory() {
System.setProperty("jersey.test.host", "localhost");
System.setProperty("jersey.config.test.container.port", "8000");
//how to set the context path ??
return new ExternalTestContainerFactory();
}
内存测试有效,因为服务是由框架在它知道的路径上部署的(它无论如何都没有上下文路径) 当我在外部容器上运行时,它会尝试连接到http://myhost:port/service1/而不是http://myhost:port/contexpath/service1/,因此找不到404
要在外部容器上运行,如何指定上下文路径? 该文档仅指定主机和端口属性。是否存在上下文路径的任何属性?
我正在使用Jersey 2.17
答案 0 :(得分:2)
最后我想出了一个解决方案
@Override
public TestContainerFactory getTestContainerFactory() {
return new ExternalTestContainerFactory(){
@Override
public TestContainer create(URI baseUri, DeploymentContext context)
throws IllegalArgumentException {
try {
baseUri = new URI("http://localhost:8000/contextpath");
} catch (URISyntaxException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return super.create(baseUri, context);
}
};
}
答案 1 :(得分:1)
如果你有外部servlet:
导入jersey-test-framework-core apis以实现自己的TestContainerFactory
testCompile 'org.glassfish.jersey.test-framework:jersey-test-framework-core:2.22.2'
让JerseyTest知道您将通过SystemProperties
拥有自己的提供商systemProperty 'jersey.config.test.container.factory', 'my.package.MyTestContainerFactory'
创建您自己的提供商(比jersey-test-framework-provider-external
import org.glassfish.jersey.test.spi.TestContainer;
import org.glassfish.jersey.test.spi.TestContainerFactory;
public class MyTestContainerFactory implements TestContainerFactory {
@Override
public TestContainer create(URI baseUri, DeploymentContext deploymentContext) {
return new TestContainer(){
@Override
public ClientConfig getClientConfig() {
return null;
}
@Override
public URI getBaseUri() {
return URI.create("http://localhost:8080/myapp/api");
}
@Override
public void start() {
// Do nothing
}
@Override
public void stop() {
// Do nothing
}
};
}
}