Bean变量在单元测试期间未加载

时间:2017-04-02 21:32:21

标签: spring-boot mockito spring-boot-test

我正在尝试在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,但它不起作用。另外,如何在测试中验证其加载值? 感谢您的帮助。

0 个答案:

没有答案
相关问题