@DataJpaTest y @Async El método CRUDRepository no funciona en set

Actualmente estoy implementando algunos methods de depósito como @Async con spring-boot, y está funcionando como debería cuando arranque la aplicación, pero cuando se ejecutan testings de integración, las cosas empiezan a parecer extrañas.

He configurado un pequeño proyecto que muestra el problema.

Repositorio:

 interface MyObjectRepository : CrudRepository<MyObject, Long> { @Async fun findBySomething(something: String): ListenableFuture<MyObject?> } 

Solicitud:

 @SpringBootApplication @EnableAsync class Application { private val log = LoggerFactory.getLogger(Application::class.java) } fun main(args: Array<String>) { SpringApplication.run(Application::class.java, *args) } 

Y mi caso de testing:

 @RunWith(SpringRunner::class) @DataJpaTest class MyObjectRepositoryTest { @Autowinetworking lateinit var target: MyObjectRepository @Before fun `init`() { target.deleteAll() } @Test fun `should be able to find MyObject`() { val m = MyObject("something") val expected = target.save(m) val futureResult = target.findBySomething("something") val result = futureResult.get() assert.that(result, equalTo(expected)) } } 

Mis resultados:

expected == the object (good)

result == null (bad)

Si @Async en el nivel de class en el repository, el resultado se da la vuelta.

Y si además hago que la testing duerma después de llamar a target.save(m) tanto el result expected como el result son null

¿Alguien tiene alguna sugerencia sobre qué podría estar mal? ¿Me falta algo (como una anotación con fines de testing?).

De nuevo, todo funciona bien cuando reinicio la aplicación y realizo llamadas de descanso a mi controller.

Sugeriría que no use @DataJpaTest porque quiere probar otro componente con Spring junto con el repository de JPA.

Las testings de corte de Spring Boot, como @WebMvcTest , @JsonTest etc. solo cargan una porción del context de la aplicación, no toda la cosa. Solo cargan configuraciones automáticas específicas y ciertas dependencies de testing. Lo que supongo que falta cuando se usa @DataJpaTest

Sugiero usar @SpringBootTest aunque esto también puede ser muy pesado ya que carga, la gran mayoría, de la aplicación.