🔖 java


Integration tests on JPA repositories

Configuration

First add the corresponding dependencies in the pom.xml:

<dependencies>
    <!-- other dependencies -->
 
    <!-- TEST -->
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-test</artifactId>
        <scope>test</scope>
    </dependency>
    <!-- embedded database for faster tests -->
    <dependency>
        <groupId>com.h2database</groupId>
        <artifactId>h2</artifactId>
        <scope>test</scope>
    </dependency>
</dependencies>

Create the integration test with the right annotations:

@ExtendWith(SpringExtension.class)
@ContextConfiguration(classes = DevicePairingJpaRepositoryIT.TestConfig.class)
@DataJpaTest
class DevicePairingJpaRepositoryIT {
 
    // need to create custom configuration so only use the right
    // spring-boot configuration
    @AutoConfigureTestDatabase
    @Configuration
    @EnableJpaRepositories(basePackages = "com.bioserenity.pairing.repository")
    @EntityScan
    static class TestConfig {
    }
 
    @Autowired
    private DevicePairingJpaRepository devicePairingJpaRepository;
 
    @Test
    void itWorks() {
        assertNotNull(devicePairingJpaRepository);
    }
}
title: By default, transactions in tests are rollbacked

By default, the transactions in the tests are rollbacked.

When testing the JPA methods, I got the following message “Rolled back transaction for test”.

I think it’s because it’s a test, so it will always rollback as to have isolated tests, so it’s not an issue.

If you want to disable auto rollback, just add the annotation @Rollback(false), e.g. on class level:

@DataJpaTest
@Rollback(false)
class FoobarIT {}

Or on method level:

@Test
@Rollback(false)
void testFoobar() {}

Resources