zoukankan      html  css  js  c++  java
  • springmvc 项目单元测试

    对于web项目如果希望通过url来进行单元测试,但是启动服务器和建立http client 来进行测试非常麻烦,并且依赖网络环境。这样我们可以通过引入MockMvc进行测试。

    一、引入jar包 

            <dependency>
                <groupId>junit</groupId>
                <artifactId>junit</artifactId>
                <version>4.12</version>
                <scope>test</scope>
            </dependency>
            <dependency>
                <groupId>org.springframework</groupId>
                <artifactId>spring-test</artifactId>
                <version>${spring.version}</version>
                <scope>test</scope>
            </dependency>
            <dependency>
                <groupId>com.jayway.jsonpath</groupId>
                <artifactId>json-path-assert</artifactId>
                <version>0.8.1</version>
            </dependency>        

    二、测试代码

      1、dao层和service层

    @RunWith(SpringJUnit4ClassRunner.class)
    @ContextConfiguration(locations={"classpath:applicationContext.xml"})
    @TransactionConfiguration(transactionManager="txManager",defaultRollback=true)
    @Transactional//应用事务,这样测试就不会在数据库中留下痕迹
    public class BaseJunit4Test { 
      @Test
      
    public void test(){
      }
    }
    public class LoginServiceTest extends BaseJunit4Test{
        
        @Autowired
        private LoginService loginService;
    
        @Test
        public void testLogin() {
            String account = "kyle";
            String password = "123456";
            String result = loginService.Login(account, password);
            assertEquals("登陆成功",result);
        }
    
    }
    public class LoginMapperTest extends BaseJunit4Test{
        
        @Autowired
        private LoginMapper loginMapper;
    
        @Test
        public void testGetUserPwdByAccount() {
            String account = "kyle";
            String pwd = loginMapper.getUserPwdByAccount(account);
            assertEquals("123456",pwd);
        }
    
    }

      2、web层测试

    @RunWith(SpringJUnit4ClassRunner.class)//使用Spring Test组件进行单元测试
    @ContextConfiguration(locations={"classpath:applicationContext.xml",//加载配置文件
            "classpath:spring-mvc.xml"
    })
    @WebAppConfiguration
    @TransactionConfiguration(transactionManager="txManager",defaultRollback=true)
    @Transactional//应用事务,这样测试就不会在数据库中留下痕迹
    public class BaseWebJunit4Test {
        
        protected MockMvc mockMvc;
        protected MockHttpSession mockHttpSession;
        
        @Autowired
        protected WebApplicationContext context;
        
        @Before
        public void initMockMvc() throws Exception {
            mockMvc = MockMvcBuilders.webAppContextSetup(context).build();
            this.mockHttpSession = new MockHttpSession();
            mockMvc.perform(MockMvcRequestBuilders.post("/login")
                    .contentType(MediaType.APPLICATION_FORM_URLENCODED) 
                    .param("account", "kyle")
                    .param("password", "123456")
                    .session(mockHttpSession))
                    .andExpect(status().isOk())
                    .andExpect(content().string("登陆成功"))
                    .andDo(print())
                    .andReturn().getResponse().getContentAsString();
        }
        
        @Test
        public void test(){
            
        }
    
    }
    public class LoginControllerTest extends BaseWebJunit4Test{
        
        @Test
        public void testLogin() throws Exception {
            mockMvc.perform(MockMvcRequestBuilders.post("/login")
                        .contentType(MediaType.APPLICATION_FORM_URLENCODED) 
                        .param("account", "kyle")
                        .param("password", "123456")
                        .session(mockHttpSession))
                        .andExpect(status().isOk())
                        .andExpect(content().string("登陆成功"))
                        .andDo(print())
                        .andReturn().getResponse().getContentAsString();
        }
        
        @Test
        public void testGetUserInfo() throws Exception {
            mockMvc.perform(MockMvcRequestBuilders.post("/getUserInfo")
                        .contentType(MediaType.APPLICATION_JSON) 
                        .content("{"account":"kyle"}")
                        .session(mockHttpSession))
                        .andExpect(status().isOk())
                        .andExpect(jsonPath("$.password", is("123456")))
                        .andDo(print())
                        .andReturn().getResponse().getContentAsString();
            
        }
    
    }

    三、mock mvc 相关api

      https://blog.csdn.net/xiao_xuwen/article/details/52890730

  • 相关阅读:
    Subversion版本控制系统的安装和操作.
    java基础
    iOS_第3方类库MBprogressHUD
    wikioi 1396 伸展树(两个模板)
    从乐视和小米“最火电视”之战 看PR传播策略
    Android开发之大位图压缩水印处理
    Spark SQL with Hive
    PHP设计模式——模板模式
    Nginx 配置 gzip 压缩
    SecureCRT学习之道:SecureCRT 经常使用技巧
  • 原文地址:https://www.cnblogs.com/kyleinjava/p/9831703.html
Copyright © 2011-2022 走看看