首页 > 解决方案 > 如何拥有多个 Spring Boot Repository(Interface) 实例以进行完整的测试状态隔离?

问题描述

1) 情境化:

我的目标是:

以下是上述情况的代码:

1.1) 代码:

当前工作状态:正在工作,但使用 SAME-REPOSITORY-INSTANCE;

当前行为:

public class ServiceTests2 extends ConfigTests {

  private List<Customer> customerList;
  private Flux<Customer> customerFlux;

  @Lazy
  @Autowired
  private ICustomerRepo repo;
  private ICustomerService service;


  @BeforeEach
  public void setUp() {
    service = new CustomerService(repo);

    Customer customer1 = customerWithName().create();
    Customer customer2 = customerWithName().create();
    customerList = Arrays.asList(customer1,customer2);
    customerFlux = service.saveAll(customerList);
  }

  @Test
  @DisplayName("Save")
  public void save() {
    StepVerifier.create(customerFlux)
                .expectNextSequence(customerList)
                .verifyComplete();
  }


  @Test
  @DisplayName("Find: Objects")
  public void find_object() {
    StepVerifier
         .create(customerFlux)
         .expectNext(customerList.get(0))
         .expectNext(customerList.get(1))
         .verifyComplete();
  }
}

2)发生的错误:

3)问题:


非常感谢任何帮助或想法

标签: spring-dataspring-webfluxautowiredjunit5spring-test

解决方案


您可以在修改应用程序上下文的测试类上使用 @DirtiesContext 注释。

Java 文档

弹簧文档

默认情况下,这将在整个测试类运行后将应用程序上下文标记为脏。如果您想在单个测试方法之后将上下文标记为脏,那么您可以对测试方法进行注释,或者在您的类级别注释中将 classMode 属性设置为 AFTER_EACH_TEST_METHOD。

@DirtiesContext(classMode = ClassMode.AFTER_EACH_TEST_METHOD)

当应用程序上下文被标记为脏时,它会从测试框架的缓存中删除并关闭;因此,对于需要具有相同资源位置集的上下文的任何后续测试,都会重建底层 Spring 容器。


推荐阅读