在Java项目开发中,使用Spring框架后需要进行单元测试时,可以使用ClassPathXmlApplicationContext类初始化Spring容器对象,然后使用getBean()方法,获取Bean对象。核心方法如下:
//初始化Spring容器(上下文对象)
ApplicationContext applicationContext = new ClassPathXmlApplicationContext("classpath:spring/applicationContext.xml");
//获取Bean对象
UserService userService = (UserService) applicationContext.getBean("userServiceImpl");
综合实例
【实例】Spring使用ClassPathXmlApplicationContext类初始化并获取Bean对象,进行单元测试,获取用户信息。执行结果如下图:
(1)实体层(Entity层)
在Entity目录(实体层),创建用户信息实体类(UserInfo.java)。
package com.pjb.ssm.entity;
import org.springframework.stereotype.Component;
/**
* 用户信息实体类
*
* @author pan_junbiao
**/
@Component
public class UserInfo
{
private int userId; //用户ID
private String userName; //用户姓名
private String blogUrl; //博客地址
private String remark; //备注
//省略getter与setter方法...
}
(2)数据访问层(Dao层)
创建用户信息数据库访问接口(UserDao.java)。
package com.pjb.ssm.dao;
import com.pjb.ssm.entity.UserInfo;
/**
* 用户信息数据库访问接口
*
* @author pan_junbiao
**/
public interface UserDao
{
/**
* 获取用户信息
*/
public UserInfo getUserInfo();
}
创建用户信息数据库访问类(UserDaoImpl.java),并标识@Repository注解,实现UserDao接口,实现获取用户信息,模拟读取数据库获取数据方法。
package com.pjb.ssm.dao.impl;
import com.pjb.ssm.dao.UserDao;
import com.pjb.ssm.entity.UserInfo;
import org.springframework.stereotype.Repository;
/**
* 用户信息数据库访问类
*
* @author pan_junbiao
**/
@Repository
public class UserDaoImpl implements UserDao
{
/**
* 获取用户信息
*/
public UserInfo getUserInfo()
{
//获取用户信息(模拟读取数据库获取数据)
UserInfo userInfo = new UserInfo();
userInfo.setUserId(1);
userInfo.setUserName("pan_junbiao的博客");
userInfo.setBlogUrl("https://blog.csdn.net/pan_junbiao");
userInfo.setRemark("您好,欢迎访问 pan_junbiao的博客");
return userInfo;
}
}
(3)业务逻辑服务层(Service层)
创建用户信息业务逻辑接口(UserService.java)。
package com.pjb.ssm.service;
import com.pjb.ssm.entity.UserInfo;
/**
* 用户信息业务逻辑接口
*
* @author pan_junbiao
**/
public interface UserService
{
/**
* 获取用户信息
*/
public UserInfo getUserInfo();
}
用户信息业务逻辑类(UserServiceImpl.java),并实现UserService接口。
package com.pjb.ssm.service.impl;
import com.pjb.ssm.dao.UserDao;
import com.pjb.ssm.entity.UserInfo;
import com.pjb.ssm.service.UserService;
import org.springframework.stereotype.Service;
import javax.annotation.Resource;
/**
* 用户信息业务逻辑类
*
* @author pan_junbiao
**/
@Service
public class UserServiceImpl implements UserService
{
@Resource
private UserDao userDao;
/**
* 获取用户信息
*/
public UserInfo getUserInfo()
{
return userDao.getUserInfo();
}
}
(4)测试层(Test层)
创建用户测试类(UserTest.java),这里使用 Junit4 进行单元测试。
package com.pjb.ssm.test;
import com.pjb.ssm.entity.UserInfo;
import com.pjb.ssm.service.UserService;
import org.junit.After;
import org.junit.Before;
import org.junit.Test;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
/**
* 用户测试类
*
* @author pan_junbiao
**/
public class UserTest
{
private ApplicationContext applicationContext;
private UserService userService;
@Before
public void setUp() throws Exception
{
//初始化Spring容器(上下文对象)
applicationContext = new ClassPathXmlApplicationContext("classpath:spring/applicationContext.xml");
//获取Bean对象
userService = (UserService) applicationContext.getBean("userServiceImpl");
}
@After
public void tearDown() throws Exception
{
System.out.println("测试完成!");
}
@Test
public void getUserInfo()
{
//获取用户信息
UserInfo userInfo = userService.getUserInfo();
//打印结果
System.out.println("用户编号:" + userInfo.getUserId());
System.out.println("用户姓名:" + userInfo.getUserName());
System.out.println("博客地址:" + userInfo.getBlogUrl());
System.out.println("备注信息:" + userInfo.getRemark());
}
}