شرح - 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 ) التي تسمح على سبيل المثال بتكوين منفصل لبيئات مختلفة. إحدى طرق استخدام هذه الميزة هي تكوين قاعدة بيانات الاختبار لاستخدامها في اختبارات التكامل. أتساءل ، مع ذلك ، هل من الضروري إنشاء "اختبار" لملفي الشخصي وتفعيل ملف التعريف هذا بشكل صريح في كل ملف اختبار؟ الآن أفعل ذلك بالطريقة التالية:

  1. إنشاء تطبيق test.properties داخل src / main / resources
  2. اكتب اختبار التكوين المحدد هناك (فقط اسم قاعدة البيانات الآن)
  3. في كل ملف اختبار ما يلي:

    @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 الأصلي):

  1. قم بتعيين spring.profiles.active=test في test/resources/application-default.properties .
  2. أضف 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 وغيرها).





spring-boot