我有一个控制器代码,如下所示,我在下面的控制器代码中创建了一些what测试,但它为when
和thenReturn()
方法提供了NullPointerException
BioDetailsController.java
package com.biodetails.controller;
import javax.jcr.Node;
import javax.jcr.PathNotFoundException;
import javax.jcr.RepositoryException;
import javax.jcr.Session;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import com.adobe.cq.sightly.WCMUse;
import com.biodetails.bean.BioDetailsBean;
import com.biodetails.utility.BioDetailsConstants;
public class BioDetailsController extends WCMUse {
private static final Logger LOGGER = LoggerFactory.getLogger(BioDetailsConstants.class);
private BioDetailsBean bioDetailsBean;
@Override
public void activate() throws Exception {
LOGGER.info("Class : " + this.getClass().getName()
+ " : Method : activate() : [Start]");
bioDetailsBean = new BioDetailsBean();
String prsnInfoPath = getProperties().get(
BioDetailsConstants.PERSON_DETAILS, String.class);
Session session = getResourceResolver().adaptTo(Session.class);
try {
Node node = session.getNode(prsnInfoPath);
String description = getProperties().get(
BioDetailsConstants.JCR_DESCRIPTION, String.class);
String introText = getProperties().get(
BioDetailsConstants.JCR_INTROTEXT, String.class);
String firstName = node
.getProperty(BioDetailsConstants.JCR_FSTNAME).getValue()
.getString();
String image = node.getProperty(BioDetailsConstants.JCR_IMAGE)
.getValue().getString();
String recrtUniv = node
.getProperty(BioDetailsConstants.JCR_RECRTUNIV).getValue()
.getString();
String title = node.getProperty(BioDetailsConstants.JCR_TITLE)
.getValue().getString();
bioDetailsBean.setDescription(description);
bioDetailsBean.setFirstName(firstName);
bioDetailsBean.setImage(image);
bioDetailsBean.setIntroText(introText);
bioDetailsBean.setRecrtUniv(recrtUniv);
bioDetailsBean.setTitle(title);
} catch (PathNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (RepositoryException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
LOGGER.info("Class : " + this.getClass().getName()
+ " : Method : activate() : [End]");
}
/**
* @return the bioDetailsBean
*/
public BioDetailsBean getBioDetailsBean() {
return this.bioDetailsBean;
}
/**
* @param bioDetailsBean the bioDetailsBean to set
*/
public void setBioDetailsBean(BioDetailsBean bioDetailsBean) {
this.bioDetailsBean = bioDetailsBean;
}
}
BioDetailsControllerTest.java
package com.biodetails;
import io.wcm.testing.mock.aem.junit.AemContext;
import javax.jcr.Node;
import org.apache.sling.api.resource.ValueMap;
import org.junit.Before;
import org.junit.Rule;
import org.junit.Test;
import org.mockito.Mock;
import com.adobe.cq.sightly.WCMUse;
import com.biodetails.bean.BioDetailsBean;
import com.biodetails.controller.BioDetailsController;
public class BioDetailsControllerTest extends WCMUse {
BioDetailsController underTest;
@Mock
WCMUse wcmuse_mock;
@Mock
Node node_mock;
@Mock
ValueMap V_MOCK;
@Mock
@Rule
public final AemContext context = new AemContext();
private BioDetailsBean bioDetailsBean;
@Before
public void setUp() throws Exception {
//wcmuse_mock=mock(WCMUse.class);
// wcmuse_mock = Mock(WCMUse.class);
underTest = new BioDetailsController();
}
@Test
public void activateTest() throws Exception {
when(wcmuse_mock.getProperties()).thenReturn(V_MOCK);//HERE IAM GETTING NULL POINTER EXCEPTION
underTest.activate();
//assertTrue(true);
}
}
你能建议我如何为这个简单的控制器编写测试用例吗?我试过了,但它给出了NullPointerException
?
在@Before方法中放入
MockitoAnnotations.initMocks(this);
像
@Before
public void setUp() throws Exception {
MockitoAnnotations.initMocks(this);
underTest = new BioDetailsController();
}