0

私は初めてJerseyTestです。このサイトのさまざまな質問と同様に、主題に関する多数の投稿に従って、コントローラーの単体テストをいくつか作成しました。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を参照してください)。それでも、任意の値に設定すると、接続が拒否されます (明らかに?)。パスだけに設定すると、エラーが発生します。http://localhost:xxxbase URL is not absolute

4

2 に答える 2

1

URI getBaseUri()でオーバーライドできますJerseyTest。デフォルトはlocalhost:9998

しかし、これを実際に使用する必要はありません。JerseyTestにはすでにClient and WebTarget (から構築getBaseUri) が設定されています。呼び出す必要があるのはtarget、取得することだけです。

Response response = target().request().get();
// or
Response response = target("path").request().get();
于 2016-03-20T23:57:18.517 に答える
0

問題が見つかりました。setUp() を呼び出さずにオーバーライドsuper.setUp()したため、呼び出されTestContainer.start()ませんでした。

于 2016-03-21T03:13:01.973 に答える