我们针对Area(地区)表进行测试。我们取出area表中的所有信息,通过juint来完成测试
第一步:给数据表添加数据。
我们测试查询语句:
select * from tb_area
ORDER BY priority DESC //降序输出area表中所有信息
第二步:写dao层接口。
public interface AreaDao {
//列出区域列表
List<Area> queryArea();
}
配置mapper映射文件 :
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper
PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="storepro.dao.AreaDao">
<select id="queryArea" resultType="area">
select * from tb_area
ORDER BY priority DESC
</select>
</mapper>
注意namespace必须相同(经过测试mapper文件不必和dao层接口名称相同
我们测试要使用junit,我们先看下怎么使用。
这是junit的包我们看下BaseTest
//告诉spring通过SpringJUnit4ClassRunner.class来跑
@RunWith(SpringJUnit4ClassRunner.class)
//告诉junit spring 配置文件的位置
@ContextConfiguration({"classpath:spring/spring-dao.xml","classpath:spring/spring-service.xml"})//不能使用通配符,测试了
public class BaseTest {
}
这个类中使用了两个注解,只要就是完成在测试前对spring的装配,这样完成后,我们要测试的dao层等类只需要继承这个类就能完成这些操作。
dao层的测试:
1.建立dao层测试类
//继承后每次加载都会加载spring-dao的配置文件
public class AreaDaoTest extends BaseTest{
@Autowired
private AreaDao areaDao;
@Test
public void testQueryArea(){
List<Area> areaList=areaDao.queryArea();
assertEquals(2,areaList.size());
}
}
我们通过mapper文件和dao层接口实现了调用queryArea方法得到了List,我们通过判断长度是否为2来确定dao层是否正确
注意:我们看这句
@Autowired
private AreaDao areaDao;
我们之前并没有装配这个类,但是现在却直接可以自动装配,这是通过mapper映射的方式,直接将dao层接口实现了,并且可以直接使用注解装配
引出:除了上面那种情况,如果一个类中有另一个类属性,那么被包含的属性必须被装配,不管使用注解还是xml方式。
测试结果:正确说明我们的dao层没任何问题
测试service层:
1.先写出service层的接口和接口实现
接口:
public interface AreaService {
//获取Area的列表
List<Area> getAreaList();
}
接口实现:
@Service
public class AreaServiceImpl implements AreaService {
@Autowired
//这里的areaDao由mapper文件自动生成对象并注入ioc容器,所以不需要在AreaDao中注解它为bean
private AreaDao areaDao;
@Override
public List<Area> getAreaList() {
return areaDao.queryArea();
}
}
junit测试:
public class AreaServiceTest extends BaseTest {
@Autowired
private AreaService areaService;
@Test
public void testGetArealList(){
List<Area> areaList =areaService.getAreaList();
Assert.assertEquals("西苑",areaList.get(0).getAreaName());
}
}
我们通过判断列表第一个字符的名字是不是等于我们想要的。
注意:
@Autowired
private AreaService areaService;
这句的装配使用的是接口类型却使用了实现类AreaServiceImpl的方法,因为我们在实现类的上面加了@Servcie注解,这样可以直接使用接口类型。(不止service,@controller等也可以)
web层测试:
@Controller//注解装配它
@RequestMapping("/superadmin")//注解声明这个类的url根目录
public class AreaController {
@Autowired
private AreaService areaService;
@RequestMapping(value = "/listarea", method = RequestMethod.GET)//声明这个类的这个方法的子目录和请求数据方法
@ResponseBody//通过这个注解声明返回类型为json
private Map<String, Object> listArea() {
Map<String, Object> modelMap = new HashMap<String, Object>();
List<Area> list = new ArrayList<Area>();
list = areaService.getAreaList();
try {
modelMap.put("rows", list);
modelMap.put("totals", list.size());
} catch (Exception e) {
modelMap.put("success", false);
modelMap.put("errMsg", e.toString());
e.printStackTrace();
}
return modelMap;
}
}
我们打开tomcat输入相应的网址。
结果如图:成功