Jersey Testフレームワークを使用してREST APIの機能テストを作成しようとしています。しかし、機能テストで依存性注入を使用することになると、私はロードブロッキングを被るようです。私はhk2-metadata-generator
ファイルを読むためにHK2のServiceLocatorUtilities.createAndPopulateServiceLocator()
メソッドを使用していますここJersey Test、GrizzlyおよびHK2依存テストの機能テスト
@ApplicationPath("/")
public class Application extends ResourceConfig {
private static final URI BASE_URI = URI.create("http://localhost:8080/api/");
public static void main(String[] args) throws Exception {
System.out.println("Starting application...");
final ServiceLocator locator = ServiceLocatorUtilities.createAndPopulateServiceLocator();
final ResourceConfig resourceConfig = new ResourceConfig();
resourceConfig.register(JacksonFeature.class);
resourceConfig.register(LoggingFeature.class);
resourceConfig.packages(true, "my.package.name");
final HttpServer server = GrizzlyHttpServerFactory.createHttpServer(BASE_URI, resourceConfig, locator);
Runtime.getRuntime().addShutdownHook(new Thread(server::shutdownNow));
server.start();
Thread.currentThread().join();
}
}
お知らせ:私の主な用途は、次のようになります。このメソッドはServiceLocator
オブジェクトを作成し、次にそれをGrizzlyHttpServerFactory.createHttpServer
メソッドに渡します。これはすべてGrizzlyサーバーの稼働に最適ですが、私が今問題としているのは、Jersey Test Frameworkを使用してアプリケーションの機能テストを作成する方法です。
は私のユニットテストは、現在、次のようになります。
public class FormsResourceTest extends JerseyTest {
@Override
protected TestContainerFactory getTestContainerFactory() throws TestContainerException {
return new GrizzlyWebTestContainerFactory();
}
@Test
public void testMe() {
Response response = target("/test").request().get();
assertEquals("Should return status 200", 200, response.getStatus());
}
}
ジャージーテストフレームワークとHK2サービスロケータを使用するためにも方法はありますか私は、外部の容器として私のアプリケーションを処理して使用する必要がありますここに記載されている外部コンテナプロバイダ:External container?
また、これらは機能テストなので、注入されたサービスを模擬することはオプションではありません。
なぜAbstractBinderを使用して依存関係をバインドしてバインドをResourceConfigに登録し、ResourceConfigをサーバーに渡すことができないのですか? – Raf
@Rafそれは実際に私が行くのをやめた方向です。私はそれを見つけるためにパッケージをスキャンするのではなく、明示的に依存関係を宣言する方が良いということを理解しました。 –