Back to Repositories

Testing Multi-Datasource Operations in spring-boot-demo

This test suite validates multi-datasource functionality in a Spring Boot application using MyBatis, focusing on master-slave database operations. The tests verify user management operations across different data sources, demonstrating proper database routing and data consistency.

Test Coverage Overview

The test suite covers essential multi-datasource operations including:
  • Master database write operations through user creation
  • Slave database read operations with list queries
  • Data source routing verification
  • Integration between MyBatis-Plus and multiple databases

Implementation Analysis

The testing approach employs Spring Boot’s test framework with MyBatis-Plus integration. The implementation uses builder patterns for test data creation and leverages Hutool for JSON processing. Tests validate both direct database operations and service-layer functionality.

Key patterns include dependency injection of services, builder pattern for test data, and query wrapper utilization.

Technical Details

Testing infrastructure includes:
  • JUnit test framework
  • Spring Boot Test annotations
  • Lombok for logging (@Slf4j)
  • MyBatis-Plus QueryWrapper
  • Hutool JSON utilities
  • Custom base test class extension

Best Practices Demonstrated

The test suite exemplifies several testing best practices:
  • Clear test method naming conventions
  • Proper separation of read/write operations
  • Explicit test case documentation
  • Effective use of logging for test output
  • Clean test data setup using builder pattern

xkcoding/spring-boot-demo

demo-multi-datasource-mybatis/src/test/java/com/xkcoding/multi/datasource/mybatis/service/impl/UserServiceImplTest.java

            
package com.xkcoding.multi.datasource.mybatis.service.impl;

import cn.hutool.json.JSONUtil;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.xkcoding.multi.datasource.mybatis.SpringBootDemoMultiDatasourceMybatisApplicationTests;
import com.xkcoding.multi.datasource.mybatis.model.User;
import com.xkcoding.multi.datasource.mybatis.service.UserService;
import lombok.extern.slf4j.Slf4j;
import org.junit.Test;
import org.springframework.beans.factory.annotation.Autowired;

import java.util.List;

/**
 * <p>
 * 测试主从数据源
 * </p>
 *
 * @author yangkai.shen
 * @date Created in 2019-01-21 14:45
 */
@Slf4j
public class UserServiceImplTest extends SpringBootDemoMultiDatasourceMybatisApplicationTests {
    @Autowired
    private UserService userService;

    /**
     * 主从库添加
     */
    @Test
    public void addUser() {
        User userMaster = User.builder().name("主库添加").age(20).build();
        userService.addUser(userMaster);

        User userSlave = User.builder().name("从库添加").age(20).build();
        userService.save(userSlave);
    }

    /**
     * 从库查询
     */
    @Test
    public void testListUser() {
        List<User> list = userService.list(new QueryWrapper<>());
        log.info("【list】= {}", JSONUtil.toJsonStr(list));
    }
}