AEM Mockito单元测试问题

问题描述 投票:0回答:1

由于我是Mockito和AEM模型Java的新手。我浏览了一些文档,并为AEM模型java编写了我的第一个Mockito文件。在我的代码中,我没有看到任何错误,但是在运行时,我没有获得成功,并且无法100%完成代码覆盖率。任何人都可以纠正/帮助我修复我的代码吗?[提供带有相应嘲笑文件的示例Java]

Java文件:

import java.util.ArrayList;
import java.util.List;
import javax.annotation.PostConstruct;
import javax.inject.Inject;
import org.apache.sling.api.SlingHttpServletRequest;
import org.apache.sling.api.resource.LoginException;
import org.apache.sling.api.resource.Resource;
import org.apache.sling.api.resource.ValueMap;
import org.apache.sling.models.annotations.Model;
import org.apache.sling.models.annotations.injectorspecific.SlingObject;
import org.json.JSONException;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import com.abc.cc.ddd.ResourceResolverService;
import com.abc.cc.ddd.services.models.bean.Accordion;
@Model(adaptables = SlingHttpServletRequest.class)
public class AccordionModel {
    private final static Logger log = LoggerFactory.getLogger(AccordionModel.class);
    @SlingObject
    private SlingHttpServletRequest request;
    @Inject
    public ResourceResolverService resolverService;
    private Resource resource;
    public List < Accordion > accordionList = new ArrayList < Accordion > ();
    @PostConstruct
    protected void init() throws LoginException, JSONException {
        log.info("AccordionModel init method Start");
        resource = request.getResource();
        final ValueMap configurationOptionProperties = resource.getValueMap();
        log.debug("iconfigurationOptionProperties is " + configurationOptionProperties);
        String count = configurationOptionProperties.get("count", String.class);
        if (count != null) {
            for (int i = 1; i <= Integer.valueOf(count); i++) {
                Accordion accordion = new Accordion();
                String title = configurationOptionProperties.get("title" + i, String.class);
                String rte = configurationOptionProperties.get("rte" + i, String.class);
                accordion.setTitle(title);
                accordion.setRte(rte);
                accordionList.add(accordion);
            }
        }
        log.info("AccordionModel init method End");
    }
    public List < Accordion > getAccordionList() {
        return accordionList;
    }
}

Mockito代码

import static org.junit.Assert.assertEquals;
import static org.mockito.Mockito.when;
import java.util.ArrayList;
import java.util.List;
import org.apache.sling.api.SlingHttpServletRequest;
import org.apache.sling.api.resource.LoginException;
import org.apache.sling.api.resource.Resource;
import org.apache.sling.api.resource.ValueMap;
import org.json.JSONException;
import org.junit.Before;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.mockito.InjectMocks;
import org.mockito.Mock;
import org.mockito.junit.MockitoJUnitRunner;
import com.abc.cc.ddd.ResourceResolverService;
import com.abc.cc.ddd.services.models.bean.Accordion;
@RunWith(MockitoJUnitRunner.class)
public class AccordionModelTest {
    @InjectMocks
    private AccordionModel accordionModel;
    @Mock
    Resource resource;
    @Mock
    SlingHttpServletRequest request;
    @Mock
    ResourceResolverService resourceResolverService;
    @Mock
    ValueMap valuemap;
    public List < Accordion > accordionList = new ArrayList < Accordion > ();
    String count = "6";
    //max count, based on this count loop execute and get/set into the list  
    @Before
    public void setUp() throws Exception {
        when(request.getResource()).thenReturn(resource);
        when(resource.getValueMap()).thenReturn(valuemap);
    }
    @Test
    public void shouldReturnNullWhenPropertyIsNull() throws LoginException, JSONException {
        when(valuemap.get("count", String.class)).thenReturn(null);
        accordionModel.init();
        assertEquals(accordionModel.getAccordionList(), null);
    }
    @Test
    public void shouldReturnWhenPropertyNotNull() throws LoginException, JSONException {
        when(valuemap.get("count", String.class)).thenReturn("count");
        accordionModel.init();
        assertEquals(accordionModel.getAccordionList(), count);
    }
}

错误在程序中显示其行-> cordionModel.init();

    java.lang.NumberFormatException: For input string: "count"
    at java.lang.NumberFormatException.forInputString(Unknown Source)
    at java.lang.Integer.parseInt(Unknown Source)
    at java.lang.Integer.valueOf(Unknown Source)
    at com..services.sling.models.AccordionModel.init(AccordionModel.java:44) at   
    com..services.sling.models.AccordionModelTest.
    shouldReturnWhenPropertyNotNull(AccordionModelTest.java:55)

    java.lang.AssertionError: expected:<[]> but was:<null>
    at org.junit.Assert.fail(Assert.java:88)
    at org.junit.Assert.failNotEquals(Assert.java:834)
    at org.junit.Assert.assertEquals(Assert.java:118)
    at org.junit.Assert.assertEquals(Assert.java:144)
    at com..services.sling.models.AccordionModelTest.
    shouldReturnNullWhenPropertyIsNull(AccordionModelTest.java:53)
junit mockito aem sling-models
1个回答
0
投票

java.lang.AssertionError: expected:<[]> but was:<null>

如果返回null,则您的列表为空。因此,请调整您的测试。也考虑重新命名方法名称。如果那不是您想要的,则需要更改您的实现。

@Test
public void shouldReturnNullWhenPropertyIsNull() throws LoginException, JSONException {
    when(valuemap.get("count", String.class)).thenReturn(null);
    accordionModel.init();
    assertTrue(accordionModel.getAccordionList().isEmpty());
}

java.lang.NumberFormatException: For input string: "count"

"count"无法转换为Integer。尝试改用count变量("6")。

您应该检查列表的内容,现在我已经对其进行了调整,以检查列表的大小是否正确。

@Test
public void shouldReturnWhenPropertyNotNull() throws LoginException, JSONException {
    when(valuemap.get("count", String.class)).thenReturn(count);
    accordionModel.init();
    assertEquals(Integer.valueOf(count), accordionModel.getAccordionList().size());
}

注意,通常,断言的参数顺序应为expectedactual

© www.soinside.com 2019 - 2024. All rights reserved.