我已经使用Springboot和Hibernate创建了一个应用程序,我想为其配置单元测试。
首先是dao接口。
public interface OrderDetailsDao {
void createOrder(OrderDetails orderDetails);
void updateOrder(OrderDetails orderDetails);
void deleteOrder(OrderDetails orderDetails);
}
这是dao接口的震动
public class OrderDetailsDaoImpl extends HibernateDaoSupport implements OrderDetailsDao {
public void createOrder(OrderDetails orderDetails){
getHibernateTemplate().save(orderDetails);
}
public void updateOrder(OrderDetails orderDetails){
getHibernateTemplate().save(orderDetails);
}
public void deleteOrder(OrderDetails orderDetails){
getHibernateTemplate().delete(orderDetails);
}
}
然后我创建了一个测试类,作为以下
@RunWith(SpringJUnit4ClassRunner.class)
public class OrderDetailsDaoTest {
OrderDetails orderDetails = new OrderDetails();
@Autowired
OrderDetailsDao orderDetailsDao;
@Test
public void testCreateOrder(){
orderDetails.setValue(101.91);
orderDetailsDao.createOrder(orderDetails);
}
}
我已经将应用程序放置在测试和SRC目录的资源中。
我试图运行此单元测试用例,但由于以下错误而失败:
Caused by: org.springframework.beans.factory.NoSuchBeanDefinitionException: No qualifying bean of type 'com.abdul.epl.repo.OrderDetailsDao' available: expected at least 1 bean which qualifies as autowire candidate. Dependency annotations: {@org.springframework.beans.factory.annotation.Autowired(required=true)}
所以我能知道配置DAO层的单元测试的最佳方法吗?
您应该用@springbottest注释测试类,以告诉Spring Boot,以使Spring应用程序上下文(以及所有Spring Bean)可用于测试。此外,您应该使用Spring Runner而不是SpringJunit4Classrunner使用Spring Root。即:
@RunWith(SpringRunner.class)
@SpringBootTest
public class OrderDetailsDaoTest {
如果此仍然不起作用,则可能需要直接指定包含组件扫描的配置类,该类别扫描可以使用@ContextConfiguration注释找到对DAO类的扫描。但是,使用Spring Boot时通常不需要这。