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

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

​ 所有用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());
    }
}

源码链接:http://download.csdn.net/detail/u013041642/9836760

  • 12
    点赞
  • 85
    收藏
    觉得还不错? 一键收藏
  • 4
    评论
抱歉,我无法提供完整的Spring Boot项目代码。但我可以给您一些指导: 1. 安装Java JDK和Maven 确保您已经安装了Java JDK和Maven,这是开发Spring Boot应用程序的基本要求。 2. 创建一个Spring Boot项目 您可以使用Spring Initializr创建一个新的Spring Boot项目。Spring Initializr是一个Web工具,用于快速生成Spring Boot项目的基本结构。您可以选择所需的依赖项,例如Web、JPA、安全性等。您可以访问 https://start.spring.io/ 来使用Spring Initializr。 3. 配置应用程序 在创建Spring Boot项目后,您需要配置应用程序。您可以在application.properties文件中配置应用程序的属性。例如,您可以配置应用程序的端口、数据库等。 4. 创建控制器 控制器是处理HTTP请求的Spring Boot组件。您可以使用@Controller或@RestController注解创建控制器。您可以编写方法来处理HTTP请求,并返回响应。 5. 创建服务 服务是处理业务逻辑的Spring Boot组件。您可以使用@Service注解创建服务。您可以编写方法来处理业务逻辑。 6. 创建数据访问对象(DAO) 数据访问对象(DAO)是用于访问数据库的Spring Boot组件。您可以使用@Repository注解创建DAO。您可以编写方法来访问数据库。 7. 创建实体类 实体类是映射到数据库表的Java类。您可以使用@Entity注解创建实体类。您可以为实体类的字段创建getter和setter方法。 8. 编写测试 编写测试是Spring Boot开发中的重要部分。您可以使用JUnit和Mockito等测试框架编写测试。您可以测试控制器、服务和DAO。 以上是Spring Boot项目开发的基本步骤。当然,具体的实现方式和代码细节还需要根据您的具体需求和情况来进行调整。
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值