【问题标题】:AEM JAVA Unit test for tagsAEM JAVA 标签单元测试
【发布时间】:2022-11-19 08:09:01
【问题描述】:

在 AEM JAVA 中,我创建了一个从 Tag Manager 获取标签列表的函数。我能够获得所需的数据,并且可以从跟踪代码管理器中正确检索到代码。但是在单元测试中,下面这部分总是被排除在测试之外。我只包含了与问题相关的代码。

@SuppressWarnings("unchecked")
    public Iterator<Resource> getTransform(Iterator<Tag> childTagItr, Locale locale, SlingHttpServletRequest request) {
        return new TransformIterator(childTagItr, new Transformer() {
            public Object transform(Object o) {
                Tag tag = (Tag) o;

                String tagId = tag.getTagID();
                ValueMap vm = new ValueMapDecorator(new HashMap<String, Object>());
                vm.put("value", tagId);
                vm.put("text", tag.getTitlePath(locale));
                return new ValueMapResource(request.getResourceResolver(), new ResourceMetadata(), "nt:unstructured", vm);
            }
        });
    }

我尝试了以下测试:

@Test
void testGetDataTags() throws ServletException, IOException {
    // Arrange
    Mockito.when(request.getAttribute(Mockito.anyString())).thenReturn(slingBindings);
    Mockito.when(slingBindings.getSling()).thenReturn(sling);
    Mockito.when(request.getResourceResolver()).thenReturn(resolver);
    Mockito.when(request.getResourceResolver().adaptTo(TagManager.class)).thenReturn(tagManager);
    //Mockito.when(config.get(PATH)).thenReturn(PATH);

    //Mockito.when(expressionHelper.getString(PATH)).thenReturn(PATH_VALUE);
    Mockito.when(tagManager.resolve(Mockito.anyString())).thenReturn(parentTag);

    getTags();
    
    // Act
    final Locale locale = request.getLocale();
    CareerPageCategoryLevelTwo careerPageCategoryLevelTwo = new CareerPageCategoryLevelTwo();
    Transformer tagResource = new Transformer() {
        public Object transform(Object o) {
            Tag tag = (Tag) o;

            String tagId = tag.getTagID();
            ValueMap vm = new ValueMapDecorator(new HashMap<String, Object>());
            vm.put("value", tagId);
            vm.put("text", tag.getTitlePath(locale));
            return new ValueMapResource(request.getResourceResolver(), new ResourceMetadata(), "nt:unstructured", vm);
        }
    };
    @SuppressWarnings("unchecked")
    Iterator<Resource> iteratorResource= new TransformIterator(tagIterator, tagResource);
    Mockito.when(careerPageCategoryLevelTwo.getTransform(tagIterator, locale, request)).thenReturn(iteratorResource);
    // Assert
    assertNotNull(iteratorResource);
}

仍然是部分:

被排除在外。 我的问题是如何将这部分包含在单元测试中?

更新:careerPageCategoryLevelTwo是实现类

【问题讨论】:

    标签: java unit-testing tags aem


    【解决方案1】:

    在您的测试方法 testGetDataTags 中,您正在模拟方法 getTransform()。您正在返回 iteratorResource 而不是被测类内的“真正的”TransformIteratorCareerPageCategoryLevelTwo

    你应该改变你的线路

    Mockito.when(careerPageCategoryLevelTwo.getTransform(tagIterator, locale request)).thenReturn(iteratorResource):
    

    Iterator iteratorFromCareer = careerPageCategoryLevelTwo.getTransform(tagIterator, locale, request)

    你应该用 iteratorFromCareer 做一些事情 - 这应该调用 transform 方法。

    但我建议您少用 Mockito,多用 Sling MocksAEM Mocks

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2023-04-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-03-19
      • 1970-01-01
      相关资源
      最近更新 更多