MyBatis Plus单元测试

2023-04-16  本文已影响0人  程序员小白成长记

Background

在测试过程中,有时候只想测试数据库语句是否正确,不想测试业务代码,所以只想加载数据库相关的配置,@SpringBootTest注解会加载全部的上下文配置,有的时候本地并不具备这些环境。

JPA,Mybatis,Mybatis都提供了只加载数据库相关配置的注解

image.png

Demo

User 实体类

package com.user.domain;


import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import lombok.AccessLevel;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;

@Data
@Builder
@NoArgsConstructor
@AllArgsConstructor(access = AccessLevel.PRIVATE)
@TableName("user")
public class User {

    /**
     * id
     */
    @TableId
    private Long id;

    /**
     * user id
     */
    private Long userId;
}

mapper 类

public interface UserMapper extends BaseMapper<User> {
}

启动类

@MapperScan("com.user")
public class UnitTestApplication {
    public static void main(String[] args) {
        try {
            SpringApplication.run(UnitTestApplication.class, args);
        } catch (Exception e) {
            System.out.println(e);
        }
    }
}

Unit Test

package com.user.dao.mapper

import com.baomidou.mybatisplus.test.autoconfigure.MybatisPlusTest
import org.springframework.beans.factory.annotation.Autowired
import org.springframework.boot.test.autoconfigure.jdbc.AutoConfigureTestDatabase
import spock.lang.Specification

// @Ignore
@MybatisPlusTest
@AutoConfigureTestDatabase(replace = AutoConfigureTestDatabase.Replace.NONE)
class UserMapperTest extends Specification {


    @Autowired
    UserMapper UserMapper

    def "get use by user id"() {
        given:
        def id = 5

        when:
        def result = UserMapper.selectById(5)

        then:
        result
    }
}

pom

<dependency>
    <groupId>com.baomidou</groupId>
    <artifactId>mybatis-plus-boot-starter</artifactId>
    <version>3.5.2</version>
</dependency>

<dependency>
    <groupId>com.baomidou</groupId>
    <artifactId>mybatis-plus-boot-starter-test</artifactId>
    <version>3.5.2</version>
</dependency>

application.yaml

spring:
  application:
    name: user
  datasource:
    driver-class-name: com.mysql.cj.jdbc.Driver
    url: jdbc:mysql://mysql-user:3306/user?characterEncoding=UTF-8&autoReconnect=true&rewriteBatchedStatements=true&allowPublicKeyRetrieval=true&useSSL=false&allowMultiQueries=true&serverTimeZone=GMT%2B8
    username: root
    password: root

Ref

[1] springboot新版单元测试(很全,含旧版): https://zhuanlan.zhihu.com/p/551582501

上一篇下一篇

猜你喜欢

热点阅读