1
我正在使用JMockit测试Spring JDBC类。 以下是测试类:使用JMUnit4测试Spring JDBC与JUnit4
公共类DAOImplTest {
@Tested
DAOImpl daoImpl;
@Mocked
JdbcTemplate mockJdbcTemplate;
@Before
public void setup() throws Exception{
daoImpl = new DAOImpl();
daoImpl.setJdbcTempate(mockJdbcTemplate);
}
@Test
public void testGetSomeString() throws Exception{
final String expectedO = "7c82facc";
final String expectedG = "one";
new Expectations() {{
mockJdbcTemplate.queryForObject(SSODAOImpl.GET_IDS, String.class, expectedO);
result = expectedG;
}};
DAOImpl daoImpl = new DAOImpl();
String actual = daoImpl.getSomeString(expectedO);
assertEquals(expected, actualG);
}
}
类抛出空指针异常就行String actual = daoImpl.getSomeString(expectedO)
什么是用于获取空指针异常的原因在这一点上?
以下是DAOImpl类方法:
public String getSomeString(String or) {
DAORowMapper rowMapper = new DAORowMapper();
String g = jdbcTemplate.queryForObject(GET_IDS, rowMapper, orgIds);
return g;
}
这里是堆栈跟踪在运行JUnit 4测试。同样,空指针异常运行Junit4测试用例
java.lang.NullPointerException
at com.DAOImpl.getSomeString(DAOImpl.java:31)
at comDAOImplTest.testGetSomeString(DAOImplTest.java:45)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at java.lang.reflect.Method.invoke(Method.java:597)
如果我删除DAOImpl daoImpl = new DAOImpl();我收到以下错误! – Thunder
java.lang.AssertionError:意外的调用: Object org.springframework.jdbc.core.JdbcTemplate#queryForObject(String,org.springframework.jdbc.core.RowMapper,Object []) 实例:org.springframework.jdbc .core.JdbcTemplate @ 5ff06dc3 删除DAOImpl daoImpl = new DAOImpl();得到那个错误 – Thunder
杰夫的答案是正确的。调用“@Tested daoImpl”对象时出现的“意外调用”仅仅是因为'mockJdbcTemplate'上记录的严格期望不匹配;相反,检测到具有不同参数的(意外的)调用。所以,你可能需要调整记录的期望值。你可能更喜欢使用非严格的期望值(即'new NonStrictExpectations(){{...}}' –