aem 的单元测试不包含条件

unit testing for aem not covering a condition

我是单元测试的新手。我将 junit5 用于 aem 6.5 应用程序。我正在尝试编写单元测试,以便我可以迁移到要求至少 50% 单元测试的云,因此我现在正在做的事情。我的代码有一个 getTags() 的初始化方法。我的单元测试工作正常,但 jacoco 报告了一条未被覆盖的行。如果能帮助我找到正确的方向,我们将不胜感激。

我有这个class:

@Self
private SlingHttpServletRequest request;

@ValueMapValue
private List<String> tags;

@Override
public String getExportedType() {
    return RESOURCE_TYPE;
}

@PostConstruct
public void init() {
    Resource tagsNode = request.getResource().getChild("tags");
    tags = new ArrayList<>();
    if (tagsNode!=null) {
        for (Resource child : tagsNode.getChildren()) {
            TagModel tag = child.adaptTo(TagModel.class);
            tags.add(tag.getTag());
        }
    }
}

public List<String> getTags() {
    return this.tags;
}

我有这个 aem 单元测试

@Test
void testGetTags() {
    List<String> expected = new ImmutableList.Builder<String>()
            .add("4")
            .add("22")
            .build();

    ctx.currentResource("/content/blog_placeholder");

    BlogPlaceholderModel blogPlaceholderModel = ctx.request().adaptTo(BlogPlaceholderModel.class);

    List<String> actual = blogPlaceholderModel.getTags();

    assertEquals(expected, actual);
}

@Test
void testGetExportedType() {
    final String expected = "furniture-row/components/content/blog-placeholder";

    ctx.currentResource("/content/blog_placeholder");

    BlogPlaceholderModel blogPlaceholderModel = ctx.request().adaptTo(BlogPlaceholderModel.class);

    String actual = blogPlaceholderModel.getExportedType();

    assertEquals(expected, actual);
}

出于某种原因,我的测试没有涵盖 if 条件:

我错过了什么?谢谢

您的测试部分覆盖了这一行。

您确实对 (tagsNode != null) == true 的情况进行了测试,但没有对 (tagsNode != null) == false 的情况进行测试。因此,该线是黄色的,表示并未涵盖 if 语句的所有“分支”。