微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

post sling servlet aem 6.5 的单元测试

如何解决post sling servlet aem 6.5 的单元测试

我有以下 POST servlet,它使用来自请求的参数(名称和姓氏)在某些资源下添加新节点:

@Component(
        service = Servlet.class,property = {
                "sling.servlet.paths=/bin/createuser","sling.servlet.methods=" + HttpConstants.METHOD_POST
        })
public class CreateNodeServlet extends SlingallMethodsServlet {

    /**
     * Logger
     */
    private static final Logger log = LoggerFactory.getLogger(CreateNodeServlet.class);

    @Override
    protected void doPost(final SlingHttpServletRequest req,final SlingHttpServletResponse resp) throws IOException {
        log.info("Inside CreateNodeServlet");
        ResourceResolver resourceResolver = req.getResourceResolver();
        final Resource resource = resourceResolver.getResource("/content/test/us/en");
        String name = req.getParameter("name");
        String lastname = req.getParameter("lastname");
        log.info("name :{}",name);
        log.info("lastname :{}",lastname);

        Node node = resource.adaptTo(Node.class);
        try {
            log.info("Node {}",node.getName() );

            Node newNode = node.addNode(name+lastname,"nt:unstructured");
            newNode.setProperty("name",name);
            newNode.setProperty("lastname",lastname);

            resourceResolver.commit();
        } catch (RepositoryException e) {
            e.printstacktrace();
        } catch (PersistenceException e) {
            e.printstacktrace();
        }
        resp.setStatus(200);
        resp.getWriter().write("Simple Post Test");
    }
}

我尝试为此创建单元测试,到目前为止我得到了这个:

@ExtendWith(AemContextExtension.class)
class CreateNodeServletTest {

    private final AemContext context = new AemContext();

    private CreateNodeServlet createNodeServlet = new CreateNodeServlet();

    @Test
    void doPost() throws IOException,JSONException {

        context.currentPage(context.pageManager().getPage("/bin/createuser"));
        context.currentResource(context.resourceResolver().getResource("/bin/createuser"));
        context.requestPathInfo().setResourcePath("/bin/createuser");

        MockSlingHttpServletRequest request = context.request();
        MockSlingHttpServletResponse response = context.response();

        createNodeServlet.doPost(request,response);
        JSONArray output = new JSONArray(context.response().getoutputAsstring());

        assertEquals("Simple Post Test",output);
    }
}

但是这不起作用我在这条线上得到空指针

 Node node = resource.adaptTo(Node.class);

有人可以帮助我所缺少的东西吗?一些提示会很有帮助,因为我是 AEM 的新手,并且没有太多关于单元测试 sling servlet 的资源?

解决方法

我认为您需要将 JCR_MOCK 注册为资源解析器类型

new AemContext(ResourceResolverType.JCR_MOCK);

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。