如何在Spring Boot @DataJpaTest中测试域事件?

时间:2017-08-17 08:20:54

标签: spring-boot spring-data-jpa spring-boot-test

我正在使用https://docs.spring.io/spring-data/jpa/docs/current/reference/html/#core.domain-events中描述的Spring Data JPA域事件。事件侦听器标有@Service。它在我运行它时工作得很好,但是在使用@DataJpaTest进行测试时我无法使其工作。如果我用@SpringBootTest替换它,则测试运行完美。

我知道@DataJpaTest无法加载@Service。但即使我添加@Import(MyService.class),这仍然无效。我的问题如何使用@DataJpaTest测试域事件而不加载@SpringBootTest中的完整上下文?

2 个答案:

答案 0 :(得分:0)

事实证明,@SpringBootTest在测试中添加了@Transactional。这会导致域事件侦听器不执行,因为它仍处于事务中。

答案 1 :(得分:0)

这是我的解决方法。

// TestConfig
@TestConfiguration
public class TestConfig {

  @Bean
  public MyService myService() {
    return new MyService()
  }

}

// Domain Event Test
@RunWith(SpringRunner.class)
@Import({TestConfig.class})
@Transactional
@DataJpaTest
public class DomainEventTest {

  @Autowired
  private TestRepository repository;

  public void domainEventTest() {
    Entity entity = new Entity();
    repository.save(entity);
  }

}