springboot单元测试

springboot单元测试

一、属性与参数测试

在进行单元测试的时候,需要对相关属性进行注入,我们可以将需要注入的数据写在yml文件里面。

application.yml文件

test:
  prop: testValue

PropertiesAndArgsTest类文件

package com.bubaiwantong;

import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.boot.test.context.SpringBootTest;

//properties 为当前测试添加测试属性值
//args 为当前命令行参数值 记得要加--才可以生效,不然会发生报错

//@SpringBootTest(properties = {"test.prop=testValue2"})
@SpringBootTest(args = {"--test.prop=testValue2"})
public class PropertiesAndArgsTest {

    @Value("${test.prop}")
    private String msg;

    @Test
    public void testProperties(){
        System.out.println(msg);
    }
}

注意:properties 为当前测试添加测试属性值,args 为当前命令行参数值 记得要加–才可以生效,不然会发生报错

二、注入bean测试

MsgConfig配置类

@Configuration
public class MsgConfig {

    @Bean
    public String msg(){
        return "bean msg";
    }

}

ConfigurationTest测试类

package com.bubaiwantong;

import com.bubaiwantong.config.MsgConfig;
import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.context.annotation.Import;

@SpringBootTest
@Import({MsgConfig.class})
public class ConfigurationTest {

    @Autowired
    private String msg;

    @Test
    public void testConfiguration(){
        System.out.println(msg);
    }

}

三、数据回滚

有时候我们需要用到数据库进行测试,而在测试的时候,测试的相关操作会对数据库进行一些增删改查的相关操作,这个时候测试会在数据库插入许多垃圾数据。而我们的目的是想测试完成之后,数据库里面的内容不发生变化,这个问题可以使用事务来进行解决。

在springboot中,我们可以使用下面两个注解来完成。

@Transactional
@Rollback(true)

application.yml配置文件

server:
  port: 80

spring:
  datasource:
    druid:
      driver-class-name: com.mysql.jdbc.Driver
      url: jdbc:mysql://localhost:3306/ssmp_db?serverTimezone=GMT
      username: root
      password: 123456

mybatis-plus:
  global-config:
    db-config:
      table-prefix: tb_
      id-type: auto
  configuration:
    log-impl: org.apache.ibatis.logging.stdout.StdOutImpl

Book实体类

package com.bubaiwantong.domain;

import lombok.Data;

@Data
public class Book {
    private Integer id;
    private String name;
    private String type;
    private String description;

}

Dao层 :BookDao

package com.bubaiwantong.dao;

import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.bubaiwantong.domain.Book;
import org.apache.ibatis.annotations.Mapper;

/**
 * dao层
 * 使用mybatis-plus提供好的接口,实现basedMapper的泛型
 */

@Mapper
public interface BookDao extends BaseMapper {

}

Service接口

package com.bubaiwantong.service;

import com.bubaiwantong.domain.Book;

public interface BookService {

    public boolean save(Book book);
}

service实现类

package com.bubaiwantong.service.impl;

import com.bubaiwantong.dao.BookDao;
import com.bubaiwantong.domain.Book;
import com.bubaiwantong.service.BookService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

@Service
public class BookServiceImpl implements BookService {

    @Autowired
    private BookDao bookDao;

    @Override
    public boolean save(Book book) {
        return bookDao.insert(book) > 0;
    }
}

BookServiceTest测试类

package com.bubaiwantong;

import com.bubaiwantong.domain.Book;
import com.bubaiwantong.service.BookService;
import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.test.annotation.Rollback;
import org.springframework.transaction.annotation.Transactional;

@SpringBootTest
@Transactional
@Rollback(true)
public class BookServiceTest {

    @Autowired
    private BookService bookService;

    @Test
    void test(){
        Book book = new Book();
        book.setName("springboot");
        book.setType("springboot");
        book.setDescription("springboot");

        bookService.save(book);

    }

}

可以看到,测试之后不会对数据库产生新数据,这样我在打包部署项目的时候,就可以对项目进行直接测试了。

springboot单元测试_第1张图片

四、注入随机数据进行测试

我们使用springboot进行单元测的时候,总不能一个一个的创造数据吧,我们可以将使用随机函数创建随机值,注入到bean中,然后使用bean进行测试。

application.yml文件

testcase:
  book:
    id: ${random.int}
    name: 黑马${random.value}
    type: ${random.long}
    description: ${random.uuid}

BookCase类

package com.bubaiwantong.test.domian;

import lombok.Data;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.stereotype.Component;


@Component
@Data
@ConfigurationProperties(prefix = "testcase.book")
public class BookCase {
    private int id;
    private String name;
    private String type;
    private String description;
}

BookCaseTest测试类

package com.bubaiwantong;

import com.bubaiwantong.test.domian.BookCase;
import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;

@SpringBootTest
public class BookCaseTest {

    @Autowired
    private BookCase bookCase;

    @Test
    void test(){
        System.out.println(bookCase);
    }


测试结果:

image-20220412205948645

你可能感兴趣的:(springboot,Spring,软件测试,springboot,web,Javaweb)