شرح - spring java
التشكيل الجانبي الافتراضي التمهيد الربيع للاختبارات التكامل (6)
أضف
spring.profiles.active=tests
في ملف application.properties الخاص بك ، يمكنك إضافة ملف خصائص متعددة في تطبيق الإقلاع الربيعي مثل
application-stage.properties
،
application-prod.properties
، وما إلى ذلك ، ويمكنك تحديد ذلك في application.properties ملف أثناء الرجوع إلى الملف عن طريق إضافة
spring.profiles.active=stage
أو
spring.profiles.active=prod
يمكنك أيضًا تمرير ملف التعريف في وقت تشغيل تطبيق الإقلاع عن طريق توفير الأمر:
java -jar
-Dspring.profiles.active=local
build/libs/turtle-rnr-0.0.1-SNAPSHOT.jar
وفقًا لاسم ملف التعريف ، يتم اختيار ملف الخصائص ، وفي الحالة المذكورة أعلاه ، يجب مراعاة ملف تعريف
application-local.properties
local
في ملف
application-local.properties
يستخدم Spring-boot ملفات تعريف Spring ( http://docs.spring.io/spring-boot/docs/current/reference/html/boot-features-profiles.html ) التي تسمح على سبيل المثال بتكوين منفصل لبيئات مختلفة. إحدى طرق استخدام هذه الميزة هي تكوين قاعدة بيانات الاختبار لاستخدامها في اختبارات التكامل. أتساءل ، مع ذلك ، هل من الضروري إنشاء "اختبار" لملفي الشخصي وتفعيل ملف التعريف هذا بشكل صريح في كل ملف اختبار؟ الآن أفعل ذلك بالطريقة التالية:
- إنشاء تطبيق test.properties داخل src / main / resources
- اكتب اختبار التكوين المحدد هناك (فقط اسم قاعدة البيانات الآن)
-
في كل ملف اختبار ما يلي:
@ActiveProfiles("test")
هل هناك طريقة أكثر ذكاء / أكثر إيجازا؟ على سبيل المثال ملف تعريف الاختبار الافتراضي؟
تحرير 1: هذا السؤال يخص Spring-Boot 1.4.1
إذا كنت تستخدم maven ، يمكنك إضافة ذلك في pom.xml:
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-failsafe-plugin</artifactId>
<configuration>
<argLine>-Dspring.profiles.active=test</argLine>
</configuration>
</plugin>
...
بعد ذلك ، يجب على maven إجراء اختبارات التكامل الخاصة بك (* IT.java) باستخدام هذا العرض ، وسيبدأ IntelliJ أيضًا بتنشيط هذا الملف الشخصي - حتى تتمكن من تحديد جميع الخصائص داخل
application-test.yml
ويجب أن لا تحتاج إلى خصائص "الافتراضي".
طريقة delarative للقيام بذلك (في الواقع ، tweek طفيفة للإجابة @ Compito الأصلي):
-
قم بتعيين
spring.profiles.active=test
فيtest/resources/application-default.properties
. -
أضف
test/resources/application-test.properties
للاختبارات وتجاوز فقط الخصائص التي تحتاج إليها.
طريقة أخرى للقيام بذلك بشكل برمجي:
import static org.springframework.core.env.AbstractEnvironment.DEFAULT_PROFILES_PROPERTY_NAME;
@BeforeClass
public static void setupTest() {
System.setProperty(DEFAULT_PROFILES_PROPERTY_NAME, "test");
}
إنه عمل رائع.
لتنشيط ملف تعريف "الاختبار" ، اكتب في build.gradle الخاص بك:
test.doFirst {
systemProperty 'spring.profiles.active', 'test'
activeProfiles = 'test'
}
هناك طريقة أخرى للقيام بذلك وهي تحديد فئة اختبار أساسية (مجردة) تمددها فئات الاختبار الفعلية:
@RunWith(SpringRunner.class)
@SpringBootTest()
@ActiveProfiles("staging")
public abstract class BaseIntegrationTest {
}
اختبار ملموسة:
public class SampleSearchServiceTest extends BaseIntegrationTest{
@Inject
private SampleSearchService service;
@Test
public void shouldInjectService(){
assertThat(this.service).isNotNull();
}
}
يسمح لك هذا باستخراج أكثر من مجرد تعليق توضيحي على
@ActiveProfiles
.
يمكنك أيضًا تخيل فئات أساسية أكثر تخصصًا لأنواع مختلفة من اختبارات التكامل ، على سبيل المثال طبقة الوصول إلى البيانات مقابل طبقة الخدمة ، أو للتخصصات الوظيفية (طرق شائعة
@After
أو
@After
وغيرها).