我正在使用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
中的完整上下文?
答案 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);
}
}