Spring整合Junit
准备测试环境
创建业务层接口实现类/** * 客户的业务层接口 */
public interface ICustomerService {
/** * 查询所有客户 *
@return */
List<Customer> findAllCustomer();
/** * 保存客户 * @param customer */
void saveCustomer(Customer customer);} /** * 客户的业务层实现类 */public class CustomerServiceImpl implements ICustomerService {
private ICustomerDao customerDao;
public void setCustomerDao(ICustomerDao customerDao) {
this.customerDao = customerDao; }
@Override public List<Customer> findAllCustomer() {
return customerDao.findAllCustomer(); }
@Override public void saveCustomer(Customer customer) { customerDao.save(customer); } } 创建持久层接口实现类/** * 客户的持久层接口 */public interface ICustomerDao { /** * 查询所有客户 *
@return */ List<Customer> findAllCustomer(); /** * 保存客户 *
@param customer */ void save(Customer customer);} /** * 客户的持久层实现类 */
public class CustomerDaoImpl implements ICustomerDao {
@Override
public List<Customer> findAllCustomer() {
System.out.println("查询了所有客户"); return null; }
@Override public void save(Customer customer) {
System.out.println("保存了客户"); }} 导入junit的jar包编写测试类/** * 测试客户的业务层和持久层 */
public class CustomerServiceTest {
private ICustomerService customerService;
@Test public void testFindAll(){
customerService.findAllCustomer();
}
@Test
public void testSave(){
Customer c = new Customer();
c.setCustName("传智学院 ");
customerService.saveCustomer(c);
}}
使用xml配置步骤xml文件中的配置<?xml version="1.0" encoding="UTF-8"?><beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd">
<!-- 把资源交给spring来管理 --> <bean id="customerDao" class="com.itheima.dao.impl.CustomerDaoImpl"></bean>
<bean id="customerService" class="com.itheima.service.impl.CustomerServiceImpl"> <property name="customerDao" ref="customerDao"></property>
</bean></beans>
第一步:拷贝整合junit的必备jar包到lib目录此处需要注意的是,导入jar包时,需要导入一个spring中aop的jar包。
第二步:
使用@RunWith注解替换原有运行器@RunWith(SpringJUnit4ClassRunner.class)public class CustomerServiceTest { private ICustomerService customerService; @Test public void testFindAll(){ customerService.findAllCustomer(); } @Test public void testSave(){ Customer c = new Customer(); c.setCustName("传智学院 "); customerService.saveCustomer©; }}
第三步:
使用@ContextConfiguration指定spring配置文件的位置@RunWith(SpringJUnit4ClassRunner.class)@ContextConfiguration(locations={“classpath:bean.xml”})public class CustomerServiceTest { private ICustomerService customerService; @Test public void testFindAll(){ customerService.findAllCustomer(); } @Test public void testSave(){ Customer c = new Customer(); c.setCustName("传智学院 "); customerService.saveCustomer©; }}
第四步:
使用@Autowired给测试类中的变量注入数据
@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(locations={“classpath:bean.xml”})
public class CustomerServiceTest {
@Autowired private ICustomerService customerService;
@Test public void testFindAll(){
customerService.findAllCustomer(); }
@Test public void testSave(){
Customer c = new Customer();
c.setCustName("传智学院 ");
customerService.saveCustomer©; }}
使用纯注解配置步骤
第一步:拷贝整合junit的必备jar包到lib目录此处需要注意的是,导入jar包时,需要导入一个spring中aop的jar包。
第二步:
把资源都用注解管理
@Service(“customerService”)
public class CustomerServiceImpl implements ICustomerService {
@Autowired
private ICustomerDao customerDao;
@Override
public List findAllCustomer() {
return customerDao.findAllCustomer(); }
@Override
public void saveCustomer(Customer customer) {
customerDao.save(customer);
}} /** * 客户的持久层实现类 */
@Repository(“customerDao”)
public class CustomerDaoImpl implements ICustomerDao {
@Override public List findAllCustomer() {
System.out.println(“查询了所有客户”);
return null;
}
@Override
public void save(Customer customer) {
System.out.println(“保存了客户”); }}
第三步:
使用注解配置方式创建spring容器
@Configuration
@ComponentScan(basePackages={“com.itheima”})
public class CustomerServiceTest {
@Autowired
private ICustomerService customerService;
@Test public void testFindAll(){
customerService.findAllCustomer();
}
@Test
public void testSave(){
Customer c = new Customer();
c.setCustName("传智学院 ");
customerService.saveCustomer©;
}}
第四步:使用RunWith注解和ContextConfiguration注解配置
@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(classes={CustomerServiceTest.class})@Configuration
@ComponentScan(basePackages={“com.itheima”})
public class CustomerServiceTest {
@Autowired
private ICustomerService customerService;
@Test public void testFindAll(){
customerService.findAllCustomer(); }
@Test
public void testSave(){ Customer c = new Customer(); c.setCustName("传智学院 "); customerService.saveCustomer©; }}
为什么不把测试类配到xml中在解释这个问题之前,先解除大家的疑虑,配到XML中能不能用呢?答案是肯定的,没问题,可以使用。那么为什么不采用配置到xml中的方式呢?这个原因是这样的: 第一:当我们在xml中配置了一个bean,spring加载配置文件创建容器时,就会创建对象。 第二:测试类只是我们在测试功能时使用,而在项目中它并不参与程序逻辑,也不会解决需求上的问题,所以创建完了,并没有使用。那么存在容器中就会造成资源的浪费。 所以,基于以上两点,我们不应该把测试配置到xml文件中。