0
我使用InjectMocks进行DAo类并使用@Mock
设置依赖项。 @Before
和@After
注释用于设置方法,并且调用MockitoAnnotations.initMocks(this);
。这是我班的Mockito:单元测试 - Mockito MyBatis为selectone返回布尔值抛出空指针异常
public class DataDAOTest {
@InjectMocks
DataDAOImpl DataDAO;
@Mock
DateUtil dateUtil;
@Mock
ReferenceDataDAOImpl referenceDataDAOImpl;
@Mock
SqlSessionTemplate sqlSession;
@Mock
HashMap<String, Object> params;
@BeforeMethod
@BeforeClass
public void setUp() {
MockitoAnnotations.initMocks(this);
}
@Test
public void testIsMemberExists_DateOffsetFlag_False_Success() {
//Set Up
BaseRequest request = new BaseRequest();
request.setMemberId(11111111L);
//Expectation
when(wellnessProgramsDAO.isMemberExists(request)).thenReturn(true);
//SUT
boolean response = wellnessProgramsDAO.isMemberExists(request);
//Verify
Assert.assertEquals(response, true);
}
@Test
public void testGetMemberWellnessActivity_Success() {
//Set UP
String wellnessPgmCd = "07";
BaseRequest request = new BaseRequest();
request.setMemberId(11111111L);
//Expectation
when(wellnessProgramsDAO.getMemberWellnessActivity(request, wellnessPgmCd)).thenReturn(mockGetMemberWellnessActivity());
//SUT
List<MemberWellnessActivity> mwaList = wellnessProgramsDAO.getMemberWellnessActivity(request, wellnessPgmCd);
//Verify
assertNotNull(mwaList);
Assert.assertEquals(2, mwaList.size());
Assert.assertEquals("Exercise", mwaList.get(0).getWellActDescTxt());
Assert.assertEquals("WeightLoss", mwaList.get(1).getWellActDescTxt());
}
}
下面是从DAO实现了一套方法,从XML文件
<select id="isMemberExists" resultType="boolean">
<![CDATA[
SELECT
(CASE WHEN (COUNT(MEMBER_ID) > 0)
THEN '1' ELSE '0' END
) AS "IS_EXISTS"
FROM ${Schema}.MEMBER
WHERE MEMBER_ID=#{memberId}
]]>
</select>
我得到空指针异常而执行selectone
@Repository
@Transactional
public class DataDAOImpl extends SqlSessionDaoSupport implements
DataDAO {
@Autowired
private DateUtil dateUtil;
@Autowired
private ReferenceDataDAO referenceDataDAO;
private static final String CURRENT_DATE = "currentDate";
private static final String CURRENT_YEAR = "currentYear";
@Override
public boolean isMemberExists(BaseRequest request) {
LOGGER.debug("Calling DOA impl to get isMemberExists");
HashMap<String, Object> params = new HashMap<String, Object>();
params.put("memberId", request.getMemberId());
if(dateUtil.isDateOffsetFlag()) {
Date date = referenceDataDAO.getClaimProcessDate();
params.put(CURRENT_DATE, dateUtil.getCurrentSystemDateInDBFormat(date));
} else {
params.put(CURRENT_DATE, dateUtil.getCurrentSystemDateInDBFormat());
}
boolean isMemberVIP = getSqlSession().selectOne("wellnessPrograms.isMemberExists", params);
LOGGER.debug("isMemberExists from DB "+isMemberVIP);
return isMemberVIP;
}
public List<MemberWellnessActivity> getMemberWellnessActivity(
BaseRequest request, String wellnessPgmCd) {
LOGGER.debug("Calling DOA impl to get MemberWellnessActivity ");
HashMap<String, Object> params = new HashMap<String, Object>();
params.put("memberId", request.getMemberId());
params.put("wellnessPgmCd", wellnessPgmCd);
if(dateUtil.isDateOffsetFlag()) {
Date date = referenceDataDAO.getClaimProcessDate();
params.put(CURRENT_YEAR, dateUtil.getCurrentYear(date));
} else {
params.put(CURRENT_YEAR, dateUtil.getCurrentYear());
}
List<MemberWellnessActivity> memberWellnessActivites = getSqlSession().selectList("wellnessPrograms.getMemberWellnessActivity", params);
LOGGER.debug("Member Wellness Activites from DB "+memberWellnessActivites);
return memberWellnessActivites;
}
}
SQL。我有调试代码和会话可用,不知道为什么我得到空指针。感谢任何帮助。 注意测试用例getMemberWellnessActivity方法工作正常,唯一的区别是选择列表的,而不是selectOne
请提供TestCase的完整代码 –
您的意思是'selectOne'方法中有一个NPE吗?或者你的意思是在你称之为的线路上?如果是后者,则表明'getSqlSession()'返回null。无论哪种情况,您都没有真正显示出足够的代码来让任何人能够告诉您为什么。 –
我给出了完整的代码。 在调试时,我检查了getSqlSession()正在返回会话对象。问题出在执行selectOne(“wellnessPrograms.isMemberExists”,params);不知道为什么得到nullpointe。 – Vinay