2016-03-20 13 views
0

私は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が返されます。

答えて

1

JerseyTestにはURI getBaseUri()を上書きできます。デフォルトはlocalhost:9998

ですが、実際に使用する必要はありません。 JerseyTestには既にClientWebTargetgetBaseUriから構築されています)が設定されています。取得するには、電話する必要があるのはtargetです。

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

最初に 'NullPointerException'を返します。 2番目はURLが絶対的ではないと訴えています。ベースURIが 'http:// localhost:0'に設定されていることがわかります。私は問題をコンテナをセットアップすることと推測しています。 – 341008

+0

私はこの質問に対する答えを見つけるのに1時間を探していました。ポート9998の秘密は隠されており、JerseyTestの公式ドキュメントページには表示されません。 localhost:9998は質問に対する答えであり、受け入れられるべきです。 – tekHedd

0

問題が見つかりました。私はを呼び出すことなくsetUp()をオーバーライドしました。その結果、TestContainer.start()が呼び出されていませんでした。

関連する問題