KKSU
2025-01-22 81b6340bcbbb148b4d72da5223b1d82268508583
refactor(测试用例):优化实体验证工具类并调整测试用例

- 在 ValidateEntityUtils 类中增加了可变参数 columnExtractors,支持选择性查询字段
- 优化了异常处理逻辑,提高了代码的健壮性
- 调整了 AgentTest测试用例,移除了不必要的注释和测试代码
- 增加了对查询结果的验证和异常处理
2 files modified
88 ■■■■■ changed files
src/main/java/cc/mrbird/febs/common/utils/ValidateEntityUtils.java 66 ●●●●● patch | view | raw | blame | history
src/test/java/cc/mrbird/febs/AgentTest.java 22 ●●●● patch | view | raw | blame | history
src/main/java/cc/mrbird/febs/common/utils/ValidateEntityUtils.java
@@ -3,6 +3,7 @@
import cc.mrbird.febs.common.exception.FebsException;
import cn.hutool.core.util.StrUtil;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import com.baomidou.mybatisplus.core.toolkit.support.SFunction;
import java.util.ArrayList;
@@ -14,16 +15,16 @@
 */
public class ValidateEntityUtils {
    /**
     * 确保指定列的有效性,并返回相应的实体对象
     * 此方法用于验证数据库中某列的值是否存在,并返回包含该值的实体对象
     * 如果指定的值不存在或为null,将抛出异常
     *      此方法用于验证数据库中某列的值是否存在,并返回包含该值的实体对象
     *      如果指定的值不存在或为null,将抛出异常
     *
     * @param valueToCheck 需要验证的值
     * @param columnExtractor 列值提取器,用于指定需要验证的列
     * @param queryWrapperExtractor 查询包装器提取器,用于执行数据库查询
     * @param errMsg 错误消息格式字符串
     * @param columnExtractors 可变参数(varargs)查询字段,可选,如果没有就是查询全部
     * @param <T> 实体类类型
     * @param <R> 列值类型
     * @param <V> 需要验证的值的类型
@@ -35,34 +36,47 @@
            V valueToCheck,
            SFunction<T, R> columnExtractor,
            SFunction<LambdaQueryWrapper<T>, T> queryWrapperExtractor,
            String errMsg) {
        // 检查需要验证的值是否为null
            String errMsg,
            SFunction<T, R>... columnExtractors) {
        // 检查输入参数是否为null
        if (valueToCheck == null) {
            throw new IllegalArgumentException("The value to check cannot be null while ensureColumnReturnEntity column");
        }
        if (columnExtractor == null || queryWrapperExtractor == null) {
            throw new IllegalArgumentException("Column extractor and query wrapper extractor cannot be null while ensureColumnReturnEntity column");
        }
        T entity = null;
        try {
            // 创建LambdaQueryWrapper并配置查询条件
            LambdaQueryWrapper<T> wrapper = new LambdaQueryWrapper<>();
            wrapper.select(columnExtractor)
                    .eq(columnExtractor, valueToCheck);
            LambdaQueryWrapper<T> wrapper = Wrappers.lambdaQuery();
            if (columnExtractors != null && columnExtractors.length > 0) {
                wrapper.select(columnExtractors);
            }
            wrapper.eq(columnExtractor, valueToCheck);
            // 执行查询并获取结果实体
            entity = queryWrapperExtractor.apply(wrapper);
            // 如果查询结果为空,则抛出异常
            if (entity == null) {
                throw new FebsException(StrUtil.format(errMsg, valueToCheck));
            }
            // 提取查询结果中的列值
            R columnValue = columnExtractor.apply(entity);
            // 如果列值为null,则抛出异常
            if (columnValue == null) {
                throw new FebsException(StrUtil.format(errMsg, valueToCheck));
            }
        } catch (FebsException e) {
            // 记录异常日志
            throw e;
        } catch (Exception e) {
            // 记录异常日志
            throw new FebsException(StrUtil.format("An error occurred while ensureColumnReturnEntity column: {}", valueToCheck));
        }
        // 如果查询结果为空,则抛出异常
        if (entity == null) {
            throw new FebsException(StrUtil.format(errMsg, valueToCheck));
        }
        // 提取查询结果中的列值
        R columnValue = columnExtractor.apply(entity);
        // 如果列值为null,则抛出异常
        if (columnValue == null) {
            throw new FebsException(StrUtil.format(errMsg, valueToCheck));
            throw new FebsException(StrUtil.format("An error occurred while ensuring column return entity: {}", valueToCheck));
        }
        // 返回查询到的实体类对象
@@ -78,6 +92,7 @@
     * @param columnExtractor 列值提取器,用于指定需要验证的列
     * @param queryWrapperExtractor 查询包装器提取器,用于执行数据库查询
     * @param errMsg 错误消息格式字符串
     * @param columnExtractors 可变参数(varargs)查询字段,可选,如果没有就是查询全部
     * @param <T> 实体类类型
     * @param <R> 列值类型
     * @param <V> 需要验证的值的类型
@@ -89,7 +104,8 @@
            V valueToCheck,
            SFunction<T, R> columnExtractor,
            SFunction<LambdaQueryWrapper<T>, List<T>> queryWrapperExtractor,
            String errMsg) {
            String errMsg,
            SFunction<T, R>... columnExtractors) {
        // 检查需要验证的值是否为null
        if (valueToCheck == null) {
            throw new IllegalArgumentException("The value to check cannot be null while ensureColumnReturnEntityList column");
@@ -97,9 +113,11 @@
        List<T> entities = new ArrayList<>();
        try {
            // 创建LambdaQueryWrapper并配置查询条件
            LambdaQueryWrapper<T> wrapper = new LambdaQueryWrapper<>();
            wrapper.select(columnExtractor)
                    .eq(columnExtractor, valueToCheck);
            LambdaQueryWrapper<T> wrapper = Wrappers.lambdaQuery();
            if (columnExtractors != null && columnExtractors.length > 0) {
                wrapper.select(columnExtractors);
            }
            wrapper.eq(columnExtractor, valueToCheck);
            // 执行查询并获取结果实体列表
            entities = queryWrapperExtractor.apply(wrapper);
src/test/java/cc/mrbird/febs/AgentTest.java
@@ -24,11 +24,23 @@
    MallMemberCouponMapper mallMemberCouponMapper;
    @Test
    public void getCouponAmountMap() {
        MallMemberCoupon mallMemberCoupon = ValidateEntityUtils.ensureColumnReturnEntity(209L, MallMemberCoupon::getId, mallMemberCouponMapper::selectOne, "id{}不存在");
        List<MallMemberCoupon> mallMemberCoupons = ValidateEntityUtils.ensureColumnReturnEntityList(209L, MallMemberCoupon::getId, mallMemberCouponMapper::selectList, "id{}不存在");
        ValidateEntityUtils.ensureColumnValid(205L, MallMemberCoupon::getId, mallMemberCouponMapper::selectOne, "id{}不存在");
        ValidateEntityUtils.ensureUnique(205L, MallMemberCoupon::getId, mallMemberCouponMapper::selectCount, "id{}已存在");
        ValidateEntityUtils.ensureEqual(205L, 206L, "{},{},值不相等");
        MallMemberCoupon mallMemberCoupon = ValidateEntityUtils.ensureColumnReturnEntity(
                205L,
                MallMemberCoupon::getId,
                mallMemberCouponMapper::selectOne,
                "id{}不存在"
        );
//        System.out.println(JSONUtil.parseObj(mallMemberCoupon));
//        ValidateEntityUtils.ensureEqual(mallMemberCoupon.getState(), OrderStatusEnum.WAIT_SHIPPING.getValue(), "订单状态不是待发货状态");
        List<MallMemberCoupon> mallMemberCoupons = ValidateEntityUtils.ensureColumnReturnEntityList(
                209L,
                MallMemberCoupon::getId,
                mallMemberCouponMapper::selectList,
                "id{}不存在",
                MallMemberCoupon::getId);
//        ValidateEntityUtils.ensureColumnValid(205L, MallMemberCoupon::getId, mallMemberCouponMapper::selectOne, "id{}不存在");
//        ValidateEntityUtils.ensureUnique(205L, MallMemberCoupon::getId, mallMemberCouponMapper::selectCount, "id{}已存在");
//        ValidateEntityUtils.ensureEqual(205L, 206L, "{},{},值不相等");
//        // 使用未编码的经纬度字符串
//        String url = "https://revgeocode.search.hereapi.com/v1/revgeocode?at=48.2181679,16.3899064&lang=en-US&apiKey=21tSClSPVotUklhRA4GIgECwZ0S6MmJ73TJ8v8ojDuo";