我正在使用 Spring Boot 和 Mockito 进行测试。我已经能够为服务层编写测试用例,并且它们工作正常。但是,DAO 层的测试用例没有。在执行测试用例时jdbcTemplate
,被模拟和自动装配的对象会给出null
指针。以下是详细信息:
我的DAOTest
班级:
@RunWith(SpringRunner.class)
@SpringBootTest(classes = EcommerceApplication.class)
public classEcommerceDaoTest {
@InjectMocks
private IEcommerceDao ecommerceDao = new EcommerceDaoImpl();
@Mock
@Autowired
private JdbcTemplate as400JdbcTemplate;
@Before
public void setUp() throws Exception
{
MockitoAnnotations.initMocks(this);
}
@Test
public void checkOrderExistsTest() throws EcommerceException{
Mockito.when(as400JdbcTemplate.queryForObject(queryForOrder,new Object[]
{"1000"}, int.class)).thenReturn(1);
boolean exists =
ecommerceDao.checkOrderExists("1000");
assertTrue(exists);
}
}
EcommerceDAOImpl.java:
@Override
public boolean checkOrderExists(String orderNo)throws EcommerceException{
boolean doesExist = false;
int count = 0;
try{
count= as400JdbcTemplate.queryForObject(queryForOrder, new Object[]{orderNo}, int.class);
if(count >0){
doesExist = true;
}
}
catch(Exception e){
}
return doesExist;
}
AS400Config.java:
@Bean
@Autowired
public JdbcTemplate as400JdbcTemplate(@Qualifier("as400DataSource")DataSource dataSource) {
return new JdbcTemplate(dataSource);
}
电子商务应用程序.java
@SpringBootApplication(exclude = { DataSourceAutoConfiguration.class,
HibernateJpaAutoConfiguration.class,
DataSourceTransactionManagerAutoConfiguration.class })
@EnableTransactionManagement
@Import(As400Configuration.class)
public class EcommerceApplication {
public static void main(String[] args) {
SpringApplication.run(EcommerceApplication.class, args);
}
}
当我运行测试用例时,我得到NullPointerException
了as400JdbcTemplate
. 该功能按原样运行良好。它只是 DAO 层的测试用例由于无法jdbcTemplate
模拟/自动装配而失败。
请让我知道我哪里出错了。
您不需要同时使用@Mock
和@Autowired
。仅使用@Mock
:
@Mock private JdbcTemplate as400JdbcTemplate;
使用代替@RunWith(SpringRunner.class)
-->@RunWith(MockitoJUnitRunner.class)
还要将模拟注入 DAO,您可以使用spring 测试中的ReflectionTestUtils。
public static void setField(Class targetClass, String name, Object value)
@Before
public void setUp() throws Exception {
MockitoAnnotations.initMocks(this);
ReflectionTestUtils.setField(ecommerceDao ,"as400JdbcTemplate" ,
as400JdbcTemplate);
}
@Mock
private JdbcTemplate as400JdbcTemplate;
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句