عند استخدام تجارب الاختبار DataJpaTest في Spring Boot، يتم تكوين التطبيق التلقائي لتشغيل Flyway مما يمكن أن يؤدي إلى تنفيذ السكربتات SQL الموجودة في مشروعك، وهو ما قد لا يكون مطلوبًا في بيئة الاختبار حيث يمكن أن يتم استبدالها بطرق أخرى.
مقالات ذات صلة
لحل هذه المشكلة واستبعاد تكوين FlywayAutoConfiguration خلال اختبارات DataJpaTest، يمكنك اتباع الخطوات التالية:
- قم بإنشاء تكوين مخصص CustomTestConfiguration لإلغاء تكوين FlywayAutoConfiguration:
javaimport org.springframework.boot.autoconfigure.flyway.FlywayAutoConfiguration;
import org.springframework.boot.test.autoconfigure.orm.jpa.DataJpaTest;
import org.springframework.boot.test.context.TestConfiguration;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Import;
@TestConfiguration
@Import(DataJpaTestExcludeFlywayConfiguration.class)
public class CustomTestConfiguration {
}
@TestConfiguration
class DataJpaTestExcludeFlywayConfiguration {
@Bean
public FlywayAutoConfiguration flywayAutoConfiguration() {
return new FlywayAutoConfiguration();
}
}
- قم بتضمين CustomTestConfiguration في اختبارك:
java@RunWith(SpringRunner.class)
@DataJpaTest
@Import(CustomTestConfiguration.class)
public class MyRepositoryTest {
// أضف متغيرات الاختبار هنا
}
بهذا الشكل، سيتم استبعاد FlywayAutoConfiguration أثناء تشغيل اختباراتك DataJpaTest، وسيتمكن Hibernate من إنشاء الجداول في قاعدة البيانات H2 بدلاً من قراءة السكربتات SQL الموجودة.
المزيد من المعلومات
- لضمان عملية الاختبار السلسة، يمكنك تحديد قاعدة بيانات مخصصة للاختبارات بدلاً من استخدام القاعدة في الذاكرة الافتراضية. يمكنك تحقيق ذلك من خلال تكوين إعدادات القاعدة الخاصة بالاختبارات.
javaimport org.springframework.boot.test.autoconfigure.jdbc.AutoConfigureTestDatabase;
import org.springframework.boot.test.autoconfigure.orm.jpa.DataJpaTest;
import org.springframework.test.context.ActiveProfiles;
@RunWith(SpringRunner.class)
@DataJpaTest
@ActiveProfiles("test")
@AutoConfigureTestDatabase(replace = AutoConfigureTestDatabase.Replace.NONE)
@Import(CustomTestConfiguration.class)
public class MyRepositoryTest {
// أضف متغيرات الاختبار هنا
}
- قم بإنشاء ملف التكوين application-test.properties في المسار src/test/resources لتحديد إعدادات القاعدة البيانات الخاصة بالاختبارات:
propertiesspring.datasource.url=jdbc:h2:mem:testdb spring.datasource.driver-class-name=org.h2.Driver spring.datasource.username=sa spring.datasource.password=password spring.jpa.hibernate.ddl-auto=create
- الآن، يمكنك تشغيل اختباراتك DataJpaTest بثقة دون أن تؤثر عمليات Flyway في تنفيذ السكربتات SQL.
مع اتباع هذه الخطوات، يمكنك استبعاد تكوين FlywayAutoConfiguration بنجاح وتأمين تنفيذ اختباراتك DataJpaTest بشكل صحيح دون تداخل مع عمليات Flyway أو تأثيرها على قاعدة البيانات الاختبارية.