我正在尝试在Spring Boot中测试一些dao代码。这是我的课程:
@Repository
public class AreaDao
{
@Setter private JdbcTemplate jdbcTemplate;
@Setter private AreaMapper areaMapper;
@Getter @Setter private String sql;
public List getArea(String studioId)
{
String query = String.join(this.getSql(),studioId); // its throwing a NPE here
List areaList = jdbcTemplate.query(query, areaMapper);
return areaList;
}
}
变量sql是从bean xml加载的:
<bean id="AreaDao" class="com.studio.dao.AreaDao">
<property name="sql" value="SELECT DISTINCT(rGrp.GRP_N) AS AreaName
FROM DB.S_GRP rGrp
WHERE rGrp.STR_I = " />
<property name="jdbcTemplate" ref="JdbcTemplate" />
<property name="areaMapper" ref="AreaMapper" />
</bean>
<bean id="AreaMapper" class="com.studio.mapper.AreaMapper" />
<bean id="JdbcTemplate" class="org.springframework.jdbc.core.JdbcTemplate">
<property name="dataSource" ref="DMDataSource" />
</bean>
这是我的测试课:
@RunWith(SpringRunner.class)
@SpringBootTest
public class AreaDaoTest {
@Mock
JdbcTemplate jdbcTemplateMock;
@Mock
AreaMapper areaMapper;
@InjectMocks
@Spy
AreaDao areaDao;
private List areas;
@Before
public void setup(){
areas = new ArrayList();
}
@Test
public void testGetArea() throws SQLException {
String studioId = "12345";
when(jdbcTemplateMock.query(any(String.class), any(RowMapper.class))).thenReturn(areas);
List areas = areaDao.getArea(studioId);
Assert.assertNotNull(areas);
Assert.assertTrue(areaDao.getSql().contains(studioId));
}
}
每当我尝试运行测试时,它会在从bean xml加载sql var时抛出一个NPE。我尝试在测试中添加@ContextConfiguration或只是@Autowired,但它不起作用。另外,如何在测试中验证其加载值? 感谢您的帮助。