У меня есть простое приложение Spring Boot (2.1.4
), использующее JUnit5 и H2 для тестирования с Gradle.Все в порядке, и каждый тест проходит.Тем не менее, если я запускаю тот же тест внутри контейнера, он не проходит.Кажется, что H2 не сбрасывается между каждым тестом.Раздражает то, что это происходит только для этого конкретного теста.
Вот мой application-test.properties
logging.level.org.hibernate.SQL=DEBUG
logging.level.org.hibernate.type.descriptor.sql.BasicBinder=TRACE
# Enable web path to access H2 console
spring.h2.console.enabled=true
spring.h2.console.path=/h2-console
spring.jpa.properties.hibernate.dialect=org.hibernate.dialect.H2Dialect
spring.jpa.hibernate.ddl-auto=create-drop
spring.jpa.show-sql=true
spring.jpa.generate-ddl=true
spring.olap.datasource.driverClassName=org.h2.Driver
spring.olap.datasource.jdbc-url=jdbc:h2:mem:db1;MODE=Oracle;INIT=CREATE SCHEMA IF NOT EXISTS TEST_DW
spring.olap.datasource.url=jdbc:h2:mem:db1;MODE=Oracle;INIT=CREATE SCHEMA IF NOT EXISTS TEST_DW
spring.olap.datasource.username=sa
spring.olap.datasource.password=sa
, а вот мой тест
package com.test.repository.olap;
import org.junit.jupiter.api.DisplayName;
import org.junit.jupiter.api.Test;
import org.junit.jupiter.api.extension.ExtendWith;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.test.annotation.DirtiesContext;
import org.springframework.test.context.ActiveProfiles;
import org.springframework.test.context.junit.jupiter.SpringExtension;
import static org.junit.jupiter.api.Assertions.*;
@ExtendWith(SpringExtension.class)
@SpringBootTest
@ActiveProfiles("test")
@DirtiesContext(classMode = DirtiesContext.ClassMode.BEFORE_EACH_TEST_METHOD)
class PurchaseRepositoryTest {
@Autowired
PurchaseRepository purchaseRepository;
@Test
void can_get_the_data() {
// I know this will fix the issue but why its necessary here inside Docker container and not outside.
// this.purchaseRepository.deleteAll();
assertFalse(this.purchaseRepository.findAll().iterator().hasNext());
}
}
, а вот мойDockerfile
FROM openjdk:8-jdk-alpine as build
WORKDIR /workspace/app
COPY gradle gradle
#COPY .gradle .gradle
COPY build.gradle .
COPY src src
COPY gradlew gradlew
RUN ./gradlew build -DskipTests
RUN mkdir -p build/dependency && (cd build/dependency; jar -xf ../libs/*.jar)
FROM openjdk:8-jdk-alpine
ARG DEPENDENCY=/workspace/app/build/dependency
COPY --from=build ${DEPENDENCY}/BOOT-INF/lib /app/lib
COPY --from=build ${DEPENDENCY}/META-INF /app/META-INF
COPY --from=build ${DEPENDENCY}/BOOT-INF/classes /app
ENTRYPOINT ["java","-cp","app:app/lib/*","Test.Application"]
Есть ли способ решить эту проблему.