Back to Repositories

Testing Collection Differential Analysis in ruoyi-vue-pro

This test suite validates the CollectionUtils class functionality, specifically focusing on list comparison and differential analysis. It demonstrates advanced collection manipulation and object comparison techniques in Java.

Test Coverage Overview

The test suite provides comprehensive coverage of the CollectionUtils.diffList method, which handles complex list comparison scenarios. Key functionality includes:

  • Object comparison using custom equality functions
  • List difference analysis for create/update/delete operations
  • ID preservation and propagation during comparison
  • Handling of null values and object mutations

Implementation Analysis

The testing approach utilizes JUnit Jupiter framework with a focused test case structure. The implementation employs BiFunction for custom comparison logic, demonstrating:

  • Functional programming patterns with lambda expressions
  • Object state management during comparison
  • Collection transformation and result categorization

Technical Details

Testing infrastructure includes:

  • JUnit Jupiter test framework
  • Lombok annotations for data class generation
  • Custom Dog class with @Data and @AllArgsConstructor
  • Arrays.asList for test data preparation
  • assertEquals for result validation

Best Practices Demonstrated

The test exhibits several quality testing practices:

  • Clear test data setup and initialization
  • Explicit result validation with multiple assertions
  • Comprehensive edge case handling
  • Clean separation of test data and logic
  • Well-structured test method organization

yunaiv/ruoyi-vue-pro

yudao-framework/yudao-common/src/test/java/cn/iocoder/yudao/framework/common/util/collection/CollectionUtilsTest.java

            
package cn.iocoder.yudao.framework.common.util.collection;

import lombok.AllArgsConstructor;
import lombok.Data;
import org.junit.jupiter.api.Test;

import java.util.Arrays;
import java.util.Collection;
import java.util.List;
import java.util.function.BiFunction;

import static org.junit.jupiter.api.Assertions.assertEquals;

/**
 * {@link CollectionUtils} 的单元测试
 */
public class CollectionUtilsTest {

    @Data
    @AllArgsConstructor
    private static class Dog {

        private Integer id;
        private String name;
        private String code;

    }

    @Test
    public void testDiffList() {
        // 准备参数
        Collection<Dog> oldList = Arrays.asList(
                new Dog(1, "花花", "hh"),
                new Dog(2, "旺财", "wc")
        );
        Collection<Dog> newList = Arrays.asList(
                new Dog(null, "花花2", "hh"),
                new Dog(null, "小白", "xb")
        );
        BiFunction<Dog, Dog, Boolean> sameFunc = (oldObj, newObj) -> {
            boolean same = oldObj.getCode().equals(newObj.getCode());
            // 如果相等的情况下,需要设置下 id,后续好更新
            if (same) {
                newObj.setId(oldObj.getId());
            }
            return same;
        };

        // 调用
        List<List<Dog>> result = CollectionUtils.diffList(oldList, newList, sameFunc);
        // 断言
        assertEquals(result.size(), 3);
        // 断言 create
        assertEquals(result.get(0).size(), 1);
        assertEquals(result.get(0).get(0), new Dog(null, "小白", "xb"));
        // 断言 update
        assertEquals(result.get(1).size(), 1);
        assertEquals(result.get(1).get(0), new Dog(1, "花花2", "hh"));
        // 断言 delete
        assertEquals(result.get(2).size(), 1);
        assertEquals(result.get(2).get(0), new Dog(2, "旺财", "wc"));
    }

}