gpt4 book ai didi

java - 使用 InMemoryTestContainerFactory 时为 JerseyTest 设置 baseUrl

转载 作者:行者123 更新时间:2023-12-01 10:10:59 24 4
gpt4 key购买 nike

我是 JerseyTest 的新手。我通过关注有关该主题的大量帖子以及该网站上的各种问题,为我的 Controller 创建了一些单元测试。我使用 InMemoryTestContainerFactory 因为我的测试非常简单。但是,似乎没有办法在设置过程中设置baseUri。我设定的目标是什么?我的测试类扩展了以下类:

public abstract class ApiTest extends JerseyTest {

@Override
protected TestContainerFactory getTestContainerFactory() {
return new InMemoryTestContainerFactory();
}

@Override
protected ResourceConfig configure() {
ResourceConfig rc = new ResourceConfig()
.register(SpringLifecycleListener.class)
.register(RequestContextFilter.class)
.register(this)
.property("contextConfig", new AnnotationConfigApplicationContext(ApplicationConfiguration.class));

enable(TestProperties.LOG_TRAFFIC);
enable(TestProperties.DUMP_ENTITY);
forceSet(TestProperties.CONTAINER_PORT, "0");

return configure(rc);
}

protected abstract ResourceConfig configure(ResourceConfig rc);
}

示例测试类:

public class ResourceTest extends ApiTest {

private final Client webClient = ClientBuilder.newClient();

@Rule
public ExpectedException thrown = ExpectedException.none();

@Mock
private ResourceService service;

@Before
public void setUp() throws Exception {
initMocks(this);
}

@Override
protected ResourceConfig configure(ResourceConfig rc) {
rc.register(Resource.class);
return rc;
}

@Test
public void testGetResource() {

Response response = webClient
.target("http://localhost:8080")
.path("/resource")
.queryParam("id", "some_id_json")
.request(MediaType.APPLICATION_JSON_TYPE)
.get();

assertThat(response.getStatus(), is(Response.Status.BAD_REQUEST));
assertThat(response.readEntity(Errors.class).getMessages().get(0), isA(String.class));
}
}

此站点上提供的示例代码似乎都没有配置 baseUri(例如,请参阅 this)。然而,如果我将其设置为任意值 http://localhost:xxx 我会收到连接拒绝(显然?)。如果我将其设置为仅路径,则会收到错误基本 URL 不是绝对

最佳答案

您可以覆盖 JerseyTest 中的 URI getBaseUri()。默认为localhost:9998

但你并不真的需要使用这个。 JerseyTest 已经有一个Client WebTarget(从 getBaseUri 构建)设置为你。您只需调用 target 即可获取它,例如

Response response = target().request().get();
// or
Response response = target("path").request().get();

关于java - 使用 InMemoryTestContainerFactory 时为 JerseyTest 设置 baseUrl,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36118081/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com