【单元测试】SpirngBoot测试Controller,Service,Dao

为什么要单元测试?

如果不单元测试,不知道具体功能代码模块是否正确,只能通过PostMan或者启动项目Http请求去测试功能,而且不能具体测试某个代码块的功能(比如单独测试 FindUserByID 这个功能模块),有单元测试之后程序员可以自己测试自己写的代码功能是否正确。


添加 Pom 文件

<!--        单元测试-->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
            <scope>test</scope>
        </dependency>

测试Service

 

 生成Service测试环境

@SpringBootTest
class FindUserByIdServiceImpTest {
    @Autowired
    private FindUserByIdService findUserByIdService;
    @Test
    void findUserById() {
        UserVO user = findUserByIdService.findUserById(130);
        System.out.println(user.getUsername()+user.getPhonenumber());
        System.out.println(user);
    }
}

测试代码

@SpringBootTest:测试类所需注解

@Test:测试方法所需注解

  1. @RunWith的作用
  2. @RunWith:就是一个运行器
  3. @RunWith(SpringRunner.class):指让类运行在Spring的测试环境,以便测试开始时自动创建Spring应用上下文
  4. @RunWith(JUnit4.class) 指用JUnit4测试工具来运行测试。
  5. @RunWith(SpringJUnit4ClassRunner.class):综合了注释2和注释3,让测试类运行于Spring测试环境,并使用JUnit4测试工具来运行测试。
  6. @RunWith(Suite.class):一套测试集合(suite指一套,使用RunWith测试套件)
  7. 在Idea环境中,如果不添加额外选项,默认使用JUnit4测试工具来进行测试。因此,@RunWith(SpringRunner.class)和@RunWith(SpringJUnit4ClassRunner.class)在idea环境下是等价的。

测试结果 


还有一种情况,测试对数据库的写的操作

@SpringBootTest
@RunWith(SpringRunner.class)
class AddUserServiceImpTest {
    @Autowired
    private AddUserService addUserService;
    @Autowired
    private FindUserByIdService findUserByIdService;

    @Test
    @Transactional
    @Rollback
    void addUser(){
        User user = new User();
        user.setUsername("小白");
        user.setUserid(234);
        user.setPassword("414");
        user.setPhonenumber("19196511719");
        addUserService.addUser(user.getUserid(),user.getUsername(),user.getPhonenumber(),user.getPassword(),777);
        System.out.println("+++++++++++++++");
        UserVO userById = findUserByIdService.findUserById(234);
        System.out.println(userById);
        System.out.println("+++++++++++++++");

    }

}

测试模块不能真的添加数据到数据库,但需要测试加入数据,所以需要 @Transactional @Rollback 注解完成对sql事务和回滚的操作


测试Controller

@SpringBootTest
class FindUserByIdControllerTest {
    @Autowired
    private MockMvc mockMvc;
    @Autowired
    private WebApplicationContext webApplicationContext;
    @Test
    void findUserById() {
        mockMvc = MockMvcBuilders.webAppContextSetup(webApplicationContext).build(); //构建请求地址服务
        RequestBuilder request = get("http://localhost:8080/find?userid=150");
        try {
            String response = mockMvc.perform(request).andReturn().getResponse().getContentAsString();
            System.out.println(response);
        }catch (Exception e){
            e.printStackTrace();
        }
    }
}

需要通过 MockMvc 和 WebApplicationContext 去搭建一个请求地址服务

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值