Jakarta ee Arquillian RunAsClient向WAR中注入存根以解决依赖注入问题

Jakarta ee Arquillian RunAsClient向WAR中注入存根以解决依赖注入问题,jakarta-ee,cdi,war,ear,jboss-arquillian,Jakarta Ee,Cdi,War,Ear,Jboss Arquillian,您好,我有一个项目设置,如下所示: 我的web项目(家长) 我的web项目ear 我的web项目ejb 我的web项目war(包含REST资源@GET方法) 我的web项目testsuite集成jee(包含Arquillian) 以下是处理事件/事件上下文的REST资源: @Path("/event") public class RestResource { private static final String SAMPLE_HAL_RESPONSE =

您好,我有一个项目设置,如下所示:

  • 我的web项目(家长)
  • 我的web项目ear
  • 我的web项目ejb
  • 我的web项目war(包含REST资源@GET方法)
  • 我的web项目testsuite集成jee(包含Arquillian)


以下是处理事件/事件上下文的REST资源:

@Path("/event")
public class RestResource {
    private static final String SAMPLE_HAL_RESPONSE =
            "{\"_links\":{\"self\":{\"href\":\"/event/events\"}},\"status\":\"PARTIAL\",\"events\":[{\"id\":\"1\",\"operationType\":\"CREATE\","
                    + "\"timestamp\":\"2000-02-12T10:11:23Z\",\"targetName\":\"aTargetName\",\"moClass\":\"anMoClass\",\"moFdn\":\"anMoFdn\","
                    + "\"newAttributeValues\":[{\"attributeName\":\"attributeValue\"},{\"anotherAttributeName\":\"anotherAttributeValue\"}]}]}";

    @Inject
    EventService service;

    @GET
    @Produces({ HAL_JSON })
    @Path("/events")
    public Response getEvents(@Context final UriInfo uriInfo) {
        final List<Event> events = service.findEvents(null);

        // THIS FAILS BECAUSE EventService INJECTION fails.
        // return Response.ok("Web Service Events Num = " + events.size(), HAL_JSON).build();

        // WORKS PERFECTLY!
        return Response.ok(SAMPLE_HAL_RESPONSE, HAL_JSON).build();
    }
}
@Path(“/event”)
公共类资源{
私有静态最终字符串示例\u HAL\u响应=
“{\”\u links\”:{\“self\”:{\“href\”:“/event/events\”}、\“status\”:“PARTIAL\”、\“events\”:[{\“id\”:“1\”、\“operationType\”:“CREATE\”、”
+“\“时间戳\”:\“2000-02-12T10:11:23Z\”、\“targetName\”:\“aTargetName\”、\“moClass\”:“anMoClass\”、\“moFdn\”:“anMoFdn\”、”
+“\'newAttributeValues\”:[{\'attributeName\':\'attributeValue\',{\'anotherAttributeName\':\'anotherAttributeValue\'”}]}”;
@注入
事件服务;
@得到
@产生({HAL_JSON})
@路径(“/events”)
公共响应getEvents(@Context final UriInfo UriInfo){
最终列表事件=service.findEvents(null);
//这会失败,因为EventService注入失败。
//返回Response.ok(“Web服务事件Num=“+Events.size(),HAL_JSON).build();
//很好用!
返回Response.ok(SAMPLE_HAL_Response,HAL_JSON).build();
}
}

  • EventService的默认实现存在于我的web项目ejb中
  • 如果我在RestResource中注释掉@Inject EventService并返回示例JSON,Arquillian将运行得非常好
  • Arquillian旨在作为客户机运行,但我要做的是使用测试存根对EventService进行存根处理,以返回样本数据,但来自EventService实现,而不是RestResource
  • web应用程序在maven构建中作为ear部署

问题:我是否可以通过一个测试存根作为一个实现,由部署的war接收?或者我必须在Arquillian测试中在本地建立这场战争吗?

您可以使用cdi替代方案进行某种双重测试。但这需要修改战争。你为什么要打包ear?嗨,John,我们正在JBOSS容器中部署ear。当我们被分配一个新项目时,它是标准git回购协议的一部分。在我们的应用程序中,所有内容都作为EAR部署在这些容器中。我只是注意到,除了测试之外,CDI没有找到EventService的实现。默认的impl存在于我的EJB项目中(在父maven项目下),并尝试添加一个应用了测试存根的本地部署-仍然在@Inject或EJB:/上找不到可能的重复项
@Path("/event")
public class RestResource {
    private static final String SAMPLE_HAL_RESPONSE =
            "{\"_links\":{\"self\":{\"href\":\"/event/events\"}},\"status\":\"PARTIAL\",\"events\":[{\"id\":\"1\",\"operationType\":\"CREATE\","
                    + "\"timestamp\":\"2000-02-12T10:11:23Z\",\"targetName\":\"aTargetName\",\"moClass\":\"anMoClass\",\"moFdn\":\"anMoFdn\","
                    + "\"newAttributeValues\":[{\"attributeName\":\"attributeValue\"},{\"anotherAttributeName\":\"anotherAttributeValue\"}]}]}";

    @Inject
    EventService service;

    @GET
    @Produces({ HAL_JSON })
    @Path("/events")
    public Response getEvents(@Context final UriInfo uriInfo) {
        final List<Event> events = service.findEvents(null);

        // THIS FAILS BECAUSE EventService INJECTION fails.
        // return Response.ok("Web Service Events Num = " + events.size(), HAL_JSON).build();

        // WORKS PERFECTLY!
        return Response.ok(SAMPLE_HAL_RESPONSE, HAL_JSON).build();
    }
}