动力节点旗下在线教育品牌  |  咨询热线:400-8080-105 学Java全栈,上蛙课网
首页 > 文章

Spring MVC对Controller、Service、Dao进行Junit单元测试

09-04 17:23 138浏览
举报 T字号
  • 大字
  • 中字
  • 小字

单元测试是每个开发项目必须要经历的阶段,使用Spring MVC开发的项目也不例外。Spring MVC对Controller、Service、Dao进行Junit单元测试从而来检验项目中出现的问题和BUG,后期加以修复。

所有用Junit进行单元测试,都需要下面的配置

@RunWith(SpringJUnit4ClassRunner.class)

@ContextConfiguration(locations = {"classpath:applicationContext.xml"})

applicationContext.xml 是整个项目的Spring的配置文件。包括数据源配置、MVC配置和各种Bean的注册扫描。如果你是多个文件,就用都好隔开写多个,像这样

{ "classpath:applicationContext.xml","classpath:servlet-context.xml"}

1.Dao层的单元测试。

​ 将*Mapper接口注入进来,直接调用即可。加上@Transactional 事物管理注解以后,单元测试执行完后会撤销对数据库的修改。想看增删改的结果的话,可以把这个注解先注释。

~~~java

package testDao;

 

import com.susq.mbts.dao.UserMapper;

import com.susq.mbts.domain.User;

import org.junit.Test;

import org.junit.runner.RunWith;

import org.springframework.beans.factory.annotation.Autowired;

import org.springframework.test.context.ContextConfiguration;

import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;

import org.springframework.transaction.annotation.Transactional;

 

import java.util.Date;

 

/**

* Created by susq on 2017-5-3.

*/

@RunWith(SpringJUnit4ClassRunner.class)

@ContextConfiguration(locations = {“classpath:applicationContext.xml”})

@Transactional

public class DaoTests {

@Autowired

private UserMapper userMapper;

 

@Test

public void testSelect() {

    User userInfo = userMapper.selectByPrimaryKey(1L);

    System.out.println(userInfo);

}

 

 

@Test

public void insert(){

    User user = new User();

// user.setId(5L);

user.setAge(“9”);

user.setName(“王五”);

user.setSex(“M”);

user.setCreateTime(new Date());

userMapper.insert(user);

}

 

@Test

public void testUpdate() {

    User user = new User();

    user.setId(5L);

    user.setAge("999");

    user.setName("王五");

    user.setSex("M");

    user.setCreateTime(new Date());

 

    userMapper.updateByPrimaryKey(user);

}

 

@Test

public void testDelete() {

    userMapper.deleteByPrimaryKey(7L);

}

}

 

~~~

2. Service层的单元测试与Dao层基本一致,把Service注入进来调用就行。

~~~java

package testDao;

 

import com.susq.mbts.domain.User;

import com.susq.mbts.service.UserService;

import org.junit.Test;

import org.junit.runner.RunWith;

import org.springframework.beans.factory.annotation.Autowired;

import org.springframework.test.context.ContextConfiguration;

import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;

 

/**

* Created by susq on 2017-5-8.

*/

@RunWith(SpringJUnit4ClassRunner.class)

@ContextConfiguration(locations = {“classpath:applicationContext.xml”})

public class Sertest {

@Autowired

private UserService userService;

 

@Test

public void selectUserTest() {

    User u = userService.selectUser(1);

    System.out.println(u);

}

}

~~~

3. Controller层的单元测试

​ 一种是把Controller的Bean注入进来,调里面的方法,这很显然比较扯淡,连Url都没经过,只测了方法。另一种是使用MockMvc模拟通过url的接口调用。MockMvc是SpringMVC提供的Controller测试类,每次进行单元测试时,都是预先执行@Before中的setup方法,初始healthArticleController单元测试环境。

​ 注意:一定要把待测试的Controller实例进行MockMvcBuilders.standaloneSetup(xxxxController).build(); 否则会抛出无法找到@RequestMapping路径的异常:No mapping found for HTTP request with URI [/cms/app/getArticleList] in DispatcherServlet

 

package testDao;

 

import com.susq.mbts.controller.UserController;

import org.junit.Before;

import org.junit.Test;

import org.junit.runner.RunWith;

import org.springframework.beans.factory.annotation.Autowired;

import org.springframework.test.context.ContextConfiguration;

import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;

import org.springframework.test.web.servlet.MockMvc;

import org.springframework.test.web.servlet.MvcResult;

import org.springframework.test.web.servlet.ResultActions;

import org.springframework.test.web.servlet.request.MockMvcRequestBuilders;

import org.springframework.test.web.servlet.setup.MockMvcBuilders;

 

 

/**

 * Created by susq on 2017-5-8.

 */

@RunWith(SpringJUnit4ClassRunner.class)

@ContextConfiguration(locations = {"classpath:applicationContext.xml"})

public class ConTest {

    @Autowired

    private UserController userController;

 

    private MockMvc mockMvc;

 

    @Before

    public void setup(){

        mockMvc = MockMvcBuilders.standaloneSetup(userController).build();

    }

 

    @Test

    public void Ctest() throws Exception {

        ResultActions resultActions = this.mockMvc.perform(MockMvcRequestBuilders.post("/show_user3").param("id", "1"));

        MvcResult mvcResult = resultActions.andReturn();

        String result = mvcResult.getResponse().getContentAsString();

        System.out.println("=====客户端获得反馈数据:" + result);

        // 也可以从response里面取状态码,header,cookies...

//        System.out.println(mvcResult.getResponse().getStatus());

    }

}

以上就是Spring MVC对Controller、Service、Dao进行Junit单元测试,想了解更多详细的源码可以参照本站的Spring MVC视频教程中给出的实例。只有肯下功夫认真看完这些测试实例,完全弄懂Spring MVC中的测试问题只是早晚的事情。

0人推荐
共同学习,写下你的评论
0条评论
ya离谱
程序员ya离谱

9篇文章贡献59976字

作者相关文章更多>

推荐相关文章更多>

DOM渲染的详细过程

QCode09-04 14:38

CSS水平和垂直居中技巧大梳理

Code大师09-04 14:50

mui的input框在IOS系统下无法聚焦或点击多次才能聚焦

不写代码你养我啊08-23 11:14

推荐的-视.频播放器以及在线客服

不写代码你养我啊09-17 18:02

谈谈java多线程的三大特性

要学习了06-18 18:13

发评论

举报

0/150

取消