Back to Repositories

Testing Spring Data Solr Repository Operations in springboot-labs

This test suite validates Spring Data Solr repository functionality in a Spring Boot application, focusing on product data querying and retrieval operations.

The tests demonstrate integration between Spring Boot and Apache Solr, implementing basic search functionality for product entities.

Test Coverage Overview

The test suite covers essential Solr repository operations with a focus on product data retrieval.

  • Product name exact match query testing
  • Commented code includes pagination and fuzzy search implementations
  • Data persistence verification
  • Integration with Spring Boot application context

Implementation Analysis

The testing approach utilizes Spring Boot’s test framework with JUnit4 integration.

Key patterns include:
  • Spring Runner configuration for test execution
  • Dependency injection of repository components
  • Direct repository method invocation for Solr queries
  • Application context loading verification

Technical Details

Testing infrastructure includes:
  • JUnit 4 testing framework
  • SpringRunner for test execution
  • Spring Boot Test context configuration
  • Solr repository interface implementation
  • Product data object (SolrProductDO) for entity mapping

Best Practices Demonstrated

The test implementation showcases several testing best practices for Spring Data Solr applications.

  • Proper test class annotation setup
  • Clean separation of test methods
  • Focused test scope for individual repository methods
  • Clear test method naming conventions
  • Commented code for additional test scenarios

yudaocode/springboot-labs

lab-66/lab-66-spring-data-solr/src/test/java/cn/iocoder/springboot/lab15/springdatasolr/repository/ProductRepository02Test.java

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

import cn.iocoder.springboot.lab15.springdatasolr.Application;
import cn.iocoder.springboot.lab15.springdatasolr.dataobject.SolrProductDO;
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.test.context.junit4.SpringRunner;

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

    @Autowired
    private ProductRepository02 productRepository;

    @Test // 根据名字获得一条记录
    public void testFindByName() {
        SolrProductDO product = productRepository.findByName("芋道源码");
        System.out.println(product);
    }

//    @Test // 使用 name 模糊查询,分页返回结果
//    public void testFindByNameLike() {
//        // 根据情况,是否要制造测试数据
//        if (false) {
//            testInsert();
//        }
//
//        // 创建排序条件
//        Sort sort = Sort.by(Sort.Direction.DESC, "id");  // ID 倒序
//        // 创建分页条件。
//        Pageable pageable = PageRequest.of(0, 10, sort);
//        // 执行分页操作
//        Page<SolrProductDO> page = productRepository.findByNameLike("芋道", pageable);
//        // 打印
//        System.out.println(page.getTotalElements());
//        System.out.println(page.getTotalPages());
//    }
//
//    /**
//     * 为了给分页制造一点数据
//     */
//    private void testInsert() {
//        for (int i = 1; i <= 100; i++) {
//            SolrProductDO product = new SolrProductDO();
//            product.setId(i); // 一般 ES 的 ID 编号,使用 DB 数据对应的编号。这里,先写死
//            product.setName("芋道源码:" + i);
//            product.setDescription("我只是一个描述");
//            product.setCid(1);
//            product.setCategoryName("技术");
//            productRepository.save(product);
//        }
//    }

}