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

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
网友评论