Back to Repositories

Testing Elasticsearch Product Search Operations in SpringBoot-Labs

This test suite evaluates the Elasticsearch integration with Spring Data Jest, focusing on product repository search functionality. The tests validate paginated search operations with sorting capabilities and category filtering using Spring Boot’s testing framework.

Test Coverage Overview

The test coverage encompasses paginated search functionality with the following key areas:
  • Category-based filtering with keyword search
  • Category-only filtering without keywords
  • Pagination implementation with sorting
  • Null parameter handling for search terms

Implementation Analysis

The testing approach utilizes Spring Boot’s test framework with JUnit4 integration. The implementation leverages Spring Data Jest’s repository pattern for Elasticsearch operations, incorporating PageRequest and Sort parameters for result management.

The test methods demonstrate both filtered and unfiltered search scenarios with consistent pagination configuration.

Technical Details

Testing stack includes:
  • Spring Boot Test framework
  • JUnit 4 Runner
  • Spring Data Jest for Elasticsearch
  • PageRequest for pagination
  • Sort functionality for result ordering

Best Practices Demonstrated

The test suite exemplifies several testing best practices:
  • Clear test method naming conventions
  • Proper dependency injection using @Autowired
  • Consistent pagination parameter handling
  • Separation of concerns between search scenarios
  • Proper test context configuration with @SpringBootTest

yudaocode/springboot-labs

lab-15-spring-data-es/lab-15-spring-data-jest/src/test/java/cn/iocoder/springboot/lab15/springdatajest/repository/ProductRepository03Test.java

            
package cn.iocoder.springboot.lab15.springdatajest.repository;

import cn.iocoder.springboot.lab15.springdatajest.Application;
import cn.iocoder.springboot.lab15.springdatajest.dataobject.ESProductDO;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.data.domain.Page;
import org.springframework.data.domain.PageRequest;
import org.springframework.data.domain.Sort;
import org.springframework.test.context.junit4.SpringRunner;

@RunWith(SpringRunner.class)
@SpringBootTest(classes = Application.class)
public class ProductRepository03Test {

    @Autowired
    private ProductRepository03 productRepository;

    @Test
    public void testSearch() {
        // 查找分类为 1 + 指定关键字,并且按照 id 升序
        Page<ESProductDO> page = productRepository.search(1, "技术",
                PageRequest.of(0, 5, Sort.Direction.ASC, "id"));
        System.out.println(page.getTotalPages());

        // 查找分类为 1 ,并且按照 id 升序
        page = productRepository.search(1, null,
                PageRequest.of(0, 5, Sort.Direction.ASC, "id"));
        System.out.println(page.getTotalPages());
    }

}