zoukankan      html  css  js  c++  java
  • Spring Service、Dao进行Junit单元测试

    pring对Controller、Service、Dao进行Junit单元测试总结

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

    1
    2
    3
    @RunWith(SpringJUnit4ClassRunner.class)
     
    @ContextConfiguration(locations = {"classpath:applicationContext.xml"})

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

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

    1.Dao层的单元测试。

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

    ~~~java 

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    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 

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    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

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    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());
        }
    }
  • 相关阅读:
    Advanced Configuration Tricks
    Reviewing the Blog Module
    Editing and Deleting Data
    Making Use of Forms and Fieldsets
    Understanding the Router
    SQL Abstraction and Object Hydration
    Preparing for Different Databases
    Java学习理解路线图
    Openstack学习历程_1_视频
    CentOS安装Nginx负载
  • 原文地址:https://www.cnblogs.com/jpfss/p/10954274.html
Copyright © 2011-2022 走看看