1

TJWSEmbeddedJaxrsServerユニット/統合テスト内で、RESTEasy 組み込みサーバーを使用するか、テスト目的でリソース呼び出しPOJOResourceFactoryをシミュレートしようとしています。MockHttpRequest.get("/data")私の問題は、サーバーまたはリソース ファクトリの使用に基づいて、リソース内に正常に注入される Spring Bean の null 以外のインスタンスを持つことができないことです。

明確にするためのコードを次に示します。事前に感謝します。

Spring アプリケーション コンテキスト:

<context:annotation-config />
<context:component-scan base-package="com.cdcfast.service" />
<bean id="simpleResource" class="com.cdcfast.rest.SimpleResource" />

SimpleResource.java :

@Component
@Path("/data")
@Produces(MediaType.APPLICATION_JSON)
@Consumes(MediaType.APPLICATION_JSON)
public class SimpleResource {

@Autowired
private SimpleService service;

@GET
@Produces(MediaType.APPLICATION_JSON)
public List<Data> getData() {
    return MockDataBase.getInstance().getRows();
}

単体テスト :

@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(locations = { "classpath*:/test/spring/testApplicationContext.xml" })
public class FakeTest {

private Dispatcher dispatcher;

@Before
public void before() {
    dispatcher = MockDispatcherFactory.createDispatcher();
    POJOResourceFactory noDefaults = new POJOResourceFactory(SimpleResource.class);
    dispatcher.getRegistry().addResourceFactory(noDefaults);
}

@Test
public void aTestThatAlwaysPass() throws URISyntaxException {
    MockHttpRequest request = MockHttpRequest.get("/data");
    MockHttpResponse response = new MockHttpResponse();
    dispatcher.invoke(request, response);
    Assertions.assertThat(response.getStatus()).isEqualTo(HttpServletResponse.SC_OK);
    Assertions.assertThat(response.getContentAsString()).isNotNull().isNotEmpty();
}

}
4

2 に答える 2

2

RESTEasy ファクトリは Spring ではなく POJO を作成するため、完全なコンテナで回避できるが、テストでは容易ではない配線が行われないため、以前にこれがありました。これを回避する最善の方法は、ファクトリが作成した POJO のハンドルを取得してから、次のようなことを行うことです。

SpringBeanAutowiringSupport.processInjectionBasedOnCurrentContext(myPojo);

個人的には、RESTEasy-Spring プラグインを使用して Spring に RESTEasy Bean を作成させ、Jetty を使用してテストを起動することになりましたが、それがオプションであるかどうかはわかりません。

于 2013-03-20T10:36:29.123 に答える