私はJerseyTest
を初めて使用しています。私は、このサイトのさまざまな質問だけでなく、件名に関する多数の投稿に続いて、コントローラ用のユニットテストをいくつか作成しました。私はInMemoryTestContainerFactory
を使用しています。私のテストはとても簡単です。ただし、セットアップ中にbaseUri
を設定する方法はありません。目標を何に設定するのですか?このサイトで利用可能なサンプルコードのInMemoryTestContainerFactoryを使用する場合、JerseyTestのbaseUrlを設定してください。
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を参照してください):
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);
}
サンプルテストクラス:私のテストクラスは以下のクラスを拡張します。それでも、私はそれを何らかの値に設定した場合、接続が拒否されます(明らかに?)。http://localhost:xxx
パスだけに設定すると、エラーbase URL is not absolute
が返されます。
最初に 'NullPointerException'を返します。 2番目はURLが絶対的ではないと訴えています。ベースURIが 'http:// localhost:0'に設定されていることがわかります。私は問題をコンテナをセットアップすることと推測しています。 – 341008
私はこの質問に対する答えを見つけるのに1時間を探していました。ポート9998の秘密は隠されており、JerseyTestの公式ドキュメントページには表示されません。 localhost:9998は質問に対する答えであり、受け入れられるべきです。 – tekHedd