欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

单元测试 @mock与@SpringBootTest的使用

程序员文章站 2022-03-07 12:25:24
目录二.springboot使用@springboottest单元测试三.mock和@springboottest区别2.@springboottest需要启动服务单元测试--springbootte...

在写单元测试的过程中我们会发现需要测试的类有很多依赖,这些依赖的类或者资源又会有依赖,导致在单元测试代码里无法完成构建,我们应对的方法是mock。

简单的说就是模拟这些需要构建的类或者资源,提供给需要测试的对象使用。

一.单元测试工具mock使用

1.引入依赖包

单元测试 @mock与@SpringBootTest的使用

2.mock测试类

单元测试 @mock与@SpringBootTest的使用

二.springboot使用@springboottest单元测试

1.引入依赖包

单元测试 @mock与@SpringBootTest的使用

2.测试类

单元测试 @mock与@SpringBootTest的使用

三.mock和@springboottest区别

1.mock进行单元测试不依赖spring的bean定义文件

不需要启动web服务,执行起来速度很快。

2.@springboottest需要启动服务

执行真正的操作,执行速度慢,当需要真正的dao层操作时可选此测试方式。

单元测试--springboottest和mockmvc

springboottest

基于junit 的test

import junit.framework.testcase;
import org.junit.assert;
import org.junit.test;
import org.junit.runner.runwith;
import org.springframework.boot.test.context.springboottest;
import org.springframework.test.context.junit4.springrunner;
@runwith(springrunner.class)    //底层用junit的 springjunit4classrunner
@springboottest(classes = {xdclassspringbootapplication.class})
public class xdclassspringbootapplicationtests {
    @test
    public void testone() {
        system.out.println("start test");
        assert.assertequals(1,1);
        testcase.assertequals(1,2);
    }
}

当然也可以使用 @before 和 @after , 和 junit 的测试一样。

启动类是必须要有的。

当有多个 @test 的方法,需要一起执行的时候, 执行 xdclassspringbootapplicationtests 这个类的 run或debug。

assert 和 testcase 都是 断言,用法一样。

mockmvc类的使用和模拟http请求

相关api:

  • perform:执行一个requestbuilder请求
  • andexpect:添加resultmatcher->mockmvcresultmatchers验证规则
  • andreturn:最后返回相应的mvcresult->response
import org.junit.test;
import org.junit.runner.runwith;
import org.springframework.beans.factory.annotation.autowired;
import org.springframework.boot.test.autoconfigure.web.servlet.autoconfiguremockmvc;
import org.springframework.boot.test.context.springboottest;
import org.springframework.test.context.junit4.springrunner;
import org.springframework.test.web.servlet.mockmvc;
import org.springframework.test.web.servlet.mvcresult;
import org.springframework.test.web.servlet.request.mockmvcrequestbuilders;
import org.springframework.test.web.servlet.result.mockmvcresultmatchers;
@runwith(springrunner.class)
@springboottest
@autoconfiguremockmvc
public class mockmvctestdemo {
    @autowired
    private mockmvc mockmvc;
    @test
    public void apitest(){
        try {
            mvcresult mvcresult = mockmvc.perform(mockmvcrequestbuilders.get("/hello"))
                    .andexpect(mockmvcresultmatchers.status().isok())            .andreturn();
        } catch (exception e) {
            e.printstacktrace();
        }
    }
}

以上为个人经验,希望能给大家一个参考,也希望大家多多支持。