关于基于视觉的adobecq5组件的junit测试



我有一个控制器代码,如下所示,我在下面的控制器代码中创建了一些what测试,但它为whenthenReturn()方法提供了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();
   }

最新更新