From 8a4864e03f011ae4beabd172c2c33dfc20cbb1f8 Mon Sep 17 00:00:00 2001 From: Artem Bilan Date: Tue, 1 Oct 2019 10:49:17 -0400 Subject: [PATCH] GH-3061: Add `@DirtiesContext` to JPA tests Fixes https://github.com/spring-projects/spring-integration/issues/3061 Without a `@DirtiesContext` we keep not only a ctx in the cache, but also an embedded DB instance, which is shared between contexts. When ctx cache clean up happens, several ctxes would like to destroy their associated embedded DB which, essentially, is the same in-memory instance * The `@DirtiesContext` give us a chance to destroy embedded DB for the particular ctx in isolation --- .../jpa/core/HibernateJpaOperationsTests.java | 11 +++++++---- .../integration/jpa/core/JpaExecutorTests.java | 4 +++- 2 files changed, 10 insertions(+), 5 deletions(-) diff --git a/spring-integration-jpa/src/test/java/org/springframework/integration/jpa/core/HibernateJpaOperationsTests.java b/spring-integration-jpa/src/test/java/org/springframework/integration/jpa/core/HibernateJpaOperationsTests.java index 99bead5a89..021e36f6c2 100644 --- a/spring-integration-jpa/src/test/java/org/springframework/integration/jpa/core/HibernateJpaOperationsTests.java +++ b/spring-integration-jpa/src/test/java/org/springframework/integration/jpa/core/HibernateJpaOperationsTests.java @@ -21,16 +21,20 @@ import java.text.ParseException; import org.junit.Test; import org.junit.runner.RunWith; +import org.springframework.test.annotation.DirtiesContext; import org.springframework.test.context.ContextConfiguration; import org.springframework.test.context.junit4.SpringJUnit4ClassRunner; +import org.springframework.test.context.junit4.SpringRunner; /** * @author Gunnar Hillert + * @author Artem Bilan + * * @since 2.2 * */ -@RunWith(SpringJUnit4ClassRunner.class) -@ContextConfiguration +@RunWith(SpringRunner.class) +@DirtiesContext public class HibernateJpaOperationsTests extends AbstractJpaOperationsTests { @Test @@ -65,8 +69,7 @@ public class HibernateJpaOperationsTests extends AbstractJpaOperationsTests { @Test @Override - public void testExecuteSelectWithNativeQueryReturningEntityClass() - throws ParseException { + public void testExecuteSelectWithNativeQueryReturningEntityClass() throws ParseException { super.testExecuteSelectWithNativeQueryReturningEntityClass(); } diff --git a/spring-integration-jpa/src/test/java/org/springframework/integration/jpa/core/JpaExecutorTests.java b/spring-integration-jpa/src/test/java/org/springframework/integration/jpa/core/JpaExecutorTests.java index 161d860537..51625855f9 100644 --- a/spring-integration-jpa/src/test/java/org/springframework/integration/jpa/core/JpaExecutorTests.java +++ b/spring-integration-jpa/src/test/java/org/springframework/integration/jpa/core/JpaExecutorTests.java @@ -40,6 +40,7 @@ import org.springframework.integration.jpa.test.entity.StudentDomain; import org.springframework.integration.support.MessageBuilder; import org.springframework.integration.test.util.TestUtils; import org.springframework.messaging.Message; +import org.springframework.test.annotation.DirtiesContext; import org.springframework.test.context.junit4.SpringRunner; import org.springframework.transaction.annotation.Transactional; @@ -52,6 +53,7 @@ import org.springframework.transaction.annotation.Transactional; * @since 2.2 */ @RunWith(SpringRunner.class) +@DirtiesContext public class JpaExecutorTests { @Autowired @@ -61,7 +63,7 @@ public class JpaExecutorTests { private BeanFactory beanFactory; /** - * In this test, the {@link JpaExecutor}'s poll method will be called without + * In this test, the {@link JpaExecutor}'s p\oll method will be called without * specifying a 'query', 'namedQuery' or 'entityClass' property. This should * result in an {@link IllegalArgumentException}. */