SSM项目之商铺系统-各层的测试(三)

我们针对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输入相应的网址。

结果如图:成功 

猜你喜欢

转载自blog.csdn.net/sunmeok/article/details/81277431