JavaRush /Kurslar /All lectures for UZ purposes /Spring Boot dasturini test qilish

Spring Boot dasturini test qilish

All lectures for UZ purposes
Daraja, Dars
Mavjud

Spring Boot dastur sinovini osonlashtiradigan bir qator vositalar va annotatsiyalarni taqdim etadi. Testlarni qo'llab-quvvatlash ikki modul tomonidan ta'minlanadi: spring-boot-test asosiy elementlarni o'z ichiga oladi va spring-boot-test-autoconfigure esa testlar uchun avtomatik sozlash imkonini beradi.

Ko'pchilik dasturchilar spring-boot-starter-test "starter" dan foydalanadi, u ikkala Spring Boot testing modulini, shuningdek, JUnit Jupiter, AssertJ, Hamcrest va boshqa foydali kutubxonalarni import qiladi.

Agar sizda JUnit 4 dan foydalangan testlar mavjud bo'lsa, ularni ishga tushirish uchun JUnit 5 ning eski dvijogiga o'tishingiz mumkin. Ushbu dvijogdan foydalanish uchun quyidagi misolda ko'rsatilganidek, junit-vintage-engine ga bog'liqlik qo'shing:

<dependency>
    <groupId>org.junit.vintage</groupId>
    <artifactId>junit-vintage-engine</artifactId>
    <scope>test</scope>
    <exclusions>
        <exclusion>
            <groupId>org.hamcrest</groupId>
            <artifactId>hamcrest-core</artifactId>
        </exclusion>
    </exclusions>
</dependency>

hamcrest-core org.hamcrest:hamcrest foydasiga chiqarib tashlangan, u spring-boot-starter-test ning bir qismidir.

Test buyurtma berish imkoniyatidagi bog'liqliklar

spring-boot-starter-test "starter" (test scopeda) quyidagi oldindan ko'rilgan kutubxonalarni o'z ichiga oladi:

  • JUnit 5: Java dasturlarining modul testlari uchun de-fakto standart.

  • Spring Test va Spring Boot Test: Spring Boot dasturlari uchun yordamchi vositalar va integratsion testlar vositalari.

  • AssertJ: Oqimli tasdiqlash kutubxonasi.

  • Hamcrest: Moslamalar (matchers) kutubxonasi (shuningdek cheklovlar yoki predikatlar deb nomlanadi).

  • Mockito: Java uchun taqlid qilish (mocking) freymvorqi.

  • JSONassert: JSON uchun tasdiq kutubxonasi.

  • JsonPath: JSON uchun XPath.

Bundan tashqari, ushbu umumiy kutubxonalar testlarni yozishda foydali bo'ladi. Agar ushbu kutubxonalar sizning talablaringizga mos kelmasa, qo'shimcha test bog'liqliklarini qo'shishingiz mumkin.

Spring dasturlarini sinash

Muhim afzalliklardan biri - bu mustaqil test uchun dasturiy ta'minotni mustaqil yaratishga imkon berish. Siz Springni jalb qilmasdan new operatorini ishlatib ob'ektlar yaratishingiz mumkin. Shuningdek, haqiqiy bog'liqliklar o'rniga soxta ob'ektlar dan foydalanish mumkin.

Ko'pincha modul testlaridan tashqari, integratsion testlarni (Spring natijasidagi ApplicationContext bilan) ham o'tkazish kerak bo'ladi. Integratsion testlarni dastur yoki boshqa infrastrukturaga ulanish jarayonisiz o'tkazish qiziq bo'lishi mumkin.

Spring frayemvorkida bunday integratsion testlar uchun maxsus test moduli mavjud. Siz org.springframework:spring-test ga bog'liqlikni to'g'ridan-to'g'ri e'lon qilishingiz yoki tranzitiv ulanish uchun spring-boot-starter-test dan foydalanishingiz mumkin.

Spring Boot dasturlarini sinash

Spring Boot dasturi – bu Spring uchun ApplicationContext, shuning uchun uni sinash uchun vanilya Spring kontekstidagi operatsiyalardan boshqa hech narsa kerak emas.

Spring Boot tomonidan taqdim etilgan tashqi xususiyatlar, loglarni yozish va boshqa xususiyatlar kontekstga odatiy ravishda o'rnatiladi, faqat agar siz uni yaratishda SpringApplication dan foydalansangiz.

Spring Boot @SpringBootTest annotatsiyasini taqdim etadi, uni spring-test uchun @ContextConfiguration standart annotatsiyasining o'rniga Spring Boot funktsiyalari kerak bo'lganda foydalanish mumkin. Ushbu annotatsiya SpringApplication orqali testlar uchun ishlatiladigan ApplicationContext yaratadi. @SpringBootTest annotatsiyasidan tashqari, dasturning ko'plab aniq qism bo'limlari uchun boshqa annotatsiyalar ham mavjud.

Agar siz JUnit 4 dan foydalansangiz, testingizga @RunWith(SpringRunner.class) ni qo'shishni unutmang, aks holda annotatsiyalar e'tibordan chetda qoladi. Agar siz JUnit 5 dan foydalansangiz, @ExtendWith(SpringExtension.class) annotatsiyasining ekvivalentini qo'shish talab qilinmaydi, chunki @SpringBootTest va boshqa @…​Test annotatsiyalari allaqachon bunun bilan belgilangan.

Standart bo'yicha @SpringBootTest annotatsiyasi serverni ishga tushirmaydi. @SpringBootTest annotatsiyasi uchun webEnvironment atributidan foydalangan holda testlar bajarikishini yanada aniqlash mumkin:

  • MOCK(standart) : ApplicationContext web-kontekstini yuklaydi va veb-muhitni taqlid qiladi. Ichki serverlar bu holda ishga tushirilmaydi. Agar veb-muhit sizning classpathingizda mavjud bo'lmasa, ushbu rejim oddiy veb-bo'lmagan ApplicationContext yaratishga o'tadi. Uni @AutoConfigureMockMvc yoki @AutoConfigureWebTestClient annotatsiyalari bilan birgalikda taqlid etilgan veb-dasturdan foydalanishda test qilish uchun ishlatish mumkin.

  • RANDOM_PORT: WebServerApplicationContext ni yuklaydi va haqiqiy veb-muhitni taqdim etadi. Ichki serverlar ishga tushadi va tasodifiy portda tinglaydi.

  • DEFINED_PORT: WebServerApplicationContext ni yuklaydi va haqiqiy veb-muhitni taqdim etadi. Ichki serverlar belgilangan portda (masalan, application.properties faylidan) yoki standart port 8080da tinglaydi.

  • NONE: SpringApplication orqali ApplicationContext yuklaydi, lekin hech qanday veb-muhitni taqdim etmaydi (taqlid yoki boshqa).

Agar sizning testlaringiz @Transactional annotatsiya bilan belgilangan bo'lsa, u har bir test metodi oxirida tranzaksiyani orqaga qaytaradi. Biroq, RANDOM_PORT yoki DEFINED_PORTni foydalanganda, haqiqatda servlets muhitini taqdim etiladi, HTTP-mijoz va server alohida oqimlarda va shuning uchun alohida tranzaksiyalarda ishlaydi. Serverda boshlangan har qanday tranzaksiya bu holda orqaga qaytarilmaydi.
Agar webEnvironment = WebEnvironment.RANDOM_PORT bilan @SpringBootTest annotatsiyasini ishlatilsa, nazorat serveri boshqa tasodifiy port orqali ishga tushiriladi, agar dastur boshqa port qabul qilgan bo'lsa.

Veb-ilovaning turini aniqlash

Agar Spring MVC mavjud bo'lsa, o'zgargan MVC asosidagi dastur konteksti o'rnatiladi. Agar faqat Spring WebFlux mavjud bo'lsa, bunda aniqlanadi, va dastur konteksti WebFlux asosida o'rnatiladi.

Agar ikkala freymvork mavjud bo'lsa, Spring MVC afzallik beriladi. Agar ushbu holatda reaktiv veb-dastur sinovdan o'tkazilsa, spring.main.web-application-type mulkini o'rnatish kerak:

Java
import org.springframework.boot.test.context.SpringBootTest; @SpringBootTest(properties = "spring.main.web-application-type=reactive") class MyWebFluxTests { // ... } 
Kotlin
import org.springframework.boot.test.context.SpringBootTest @SpringBootTest(properties = ["spring.main.web-application-type=reactive"]) class MyWebFluxTests { // ... } 

Sinov konfiguratsiyasini aniqlash

Agar siz Spring Test Framework bilan tanish bo'lsangiz, ehtimol @ContextConfiguration(classes=…​) dan foydalanishga odatlanib qolgansiz, Spring qanday @Configuration yuklash kerakligini belgilash uchun. Yoki siz ko'pincha sinovingizga @Configuration belgilangan o'rnatilgan sinflardan foydalangan bo'lishingiz mumkin.

Spring Boot dasturlarini sinovdan o'tkazishda bu odatda talab etilmaydi. Spring Bootdagi @*Test annotatsiyalari sizning birlamchi konfiguratsiyangizni belgilangan holda, avtomatik ravishda qidiradi.

Qidiruv algoritmi sinov bilan bir xil paketsizidan boshlanadi, @SpringBootApplication yoki @SpringBootConfiguration bilan belgilangan sinf topilmaguncha davom etadi. Agar siz kodingizni to'g'ri tarzda strukturalashtirgan bo'lsangiz, birlamchi konfiguratsiyani odatda topishadi.

Agar siz bir qism sinov annotatsiyasidan foydalanayotgan bo'lsangiz, asosiy metod sinfingizda faqatgina aniq bir domenga oid konfiguratsiya parametrlarini qo'shishdan qochishingiz kerak.

@SpringBootApplication bilan belgilangan birlamchi komponent skanerlash konfiguratsiyasi, so'nmasliklarni ishontashtirish uchun ishlatiladigan istisno filtrlari bilan cheklanadi. Agar @SpringBootApplication bilan belgilangan sinfda @ComponentScan uchun aniq ko'rsatma mavjud bo'lsa, shuni e'tiborda tutingki, bu filtrlari o'chiriladi. Agar siz bo'limlarni olishni rejalashtirgan bo'lsangiz, ularni yana belgilashingiz kerak.

Agar siz birlamchi konfiguratsiyani o'rnatishingiz kerak bo'lsa, @TestConfiguration belgilangan o'rnatilgan sinfdan foydalanishingiz mumkin. @Configuration belgilangan o'rnatilgan sinf asosiy ilova konfiguratsiyasini o'rniga ishlatilsa, @TestConfiguration belgilangan o'rnatilgan sinf asosiy ilova konfiguratsiyasi bilan qo'shimcha sifatida ishlatiladi.

Spring sinov freymvorki ilovalar kontekstlarini sinovlar orasida kesh qiladi. Shuning uchun, testlar bir xil konfiguratsiyani ishlatgancha (uni qanday topilganligi muhim emas), kontekst yuklash jarayoni resurs talab qiluvchan bo'lishiga qaramasdan faqat bir marta amalga oshiriladi.

Sinov konfiguratsiyasini chiqarib tashlash

Agar dastur komponentlarni skanerlashdan foydalansa (masalan, @SpringBootApplication yoki @ComponentScan qoliblaridan foydalangan holda), ba'zi yuqori darajadagi konfiguratsiya sinflari mavjud bo'lishi mumkin, ular har doim ma'lum sinovlar uchun yaratilib, tasodifan barcha joylarda topiladi.

Annotatsiya @TestConfiguration birlamchi konfiguratsiyani sozlash uchun bepul sinf uchun ishlatilishi mumkin. Agar yuqori darajadagi sinf @TestConfiguration annotatsiyasi bilan belgilangan bo'lsa, uni src/test/java da skanerlash natijasida topilmasligini ko'rsatadi. So'ngra, uni kerak bo'lganda yuzaga import qilish mumkin, quyidagi misolda ko'rsatilgandek:

Java
import org.junit.jupiter.api.Test; import org.springframework.boot.test.context.SpringBootTest; import org.springframework.context.annotation.Import; @SpringBootTest @Import(MyTestsConfiguration.class) class MyTests { @Test void exampleTest() { // ... } } 
Kotlin
import org.junit.jupiter.api.Test import org.springframework.boot.test.context.SpringBootTest import org.springframework.context.annotation.Import @SpringBootTest @Import(MyTestsConfiguration::class) class MyTests { @Test fun exampleTest() { // ... } } 
Agar @ComponentScan to'g'ridan-to'g'ri ishlatilsa (ya'ni, @SpringBootApplication orqali emas), uni TypeExcludeFilter bilan birga ro'yxatdan o'tkazish kerak bo'ladi.

Ilova argumentlaridan foydalanish

Agar dastur argumentlarni qabul qilsa, @SpringBootTest annotatsiyasi orqali ularni args atributilari orqali kiritishingiz mumkin.

Java
import org.junit.jupiter.api.Test; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.boot.ApplicationArguments; import org.springframework.boot.test.context.SpringBootTest; import static org.assertj.core.api.Assertions.assertThat; @SpringBootTest(args = "--app.test=one") class MyApplicationArgumentTests { @Test void applicationArgumentsPopulated(@Autowired ApplicationArguments args) { assertThat(args.getOptionNames()).containsOnly("app.test"); assertThat(args.getOptionValues("app.test")).containsOnly("one"); } } 
Kotlin
import org.assertj.core.api.Assertions.assertThat import org.junit.jupiter.api.Test import org.springframework.beans.factory.annotation.Autowired import org.springframework.boot.ApplicationArguments import org.springframework.boot.test.context.SpringBootTest @SpringBootTest(args = ["--app.test=one"]) class MyApplicationArgumentTests { @Test fun applicationArgumentsPopulated(@Autowired args: ApplicationArguments) { assertThat(args.optionNames).containsOnly("app.test") assertThat(args.getOptionValues("app.test")).containsOnly("one") } } 

Taqlid muhiti yordamida test qilish

@SpringBootTest annotatsiyasi bo'yicha, server ishlatilmaydi, o'rniga yakuniy veb-nuqtalar test qilish uchun taqlid muhit yaratadi.

Spring MVCda, MockMvc yoki WebTestClient yordamida yakuniy veb-nuqtalarni so'rov qilish mumkin, quyidagi misolda ko'rsatilgani kabi:

Java
import org.junit.jupiter.api.Test; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.boot.test.autoconfigure.web.servlet.AutoConfigureMockMvc; import org.springframework.boot.test.context.SpringBootTest; import org.springframework.test.web.reactive.server.WebTestClient; import org.springframework.test.web.servlet.MockMvc; import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.get; import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.content; import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.status; @SpringBootTest @AutoConfigureMockMvc class MyMockMvcTests { @Test void testWithMockMvc(@Autowired MockMvc mvc) throws Exception { mvc.perform(get("/")).andExpect(status().isOk()).andExpect(content().string("Hello World")); } // Agar Spring WebFlux classpathda mavjud bo'lsa, WebTestClient yordamida MVC testlarini amalga oshirishingiz mumkin @Test void testWithWebTestClient(@Autowired WebTestClient webClient) { webClient .get().uri("/") .exchange() .expectStatus().isOk() .expectBody(String.class).isEqualTo("Hello World"); } } 
Kotlin
import org.junit.jupiter.api.Test import org.springframework.beans.factory.annotation.Autowired import org.springframework.boot.test.autoconfigure.web.servlet.AutoConfigureMockMvc import org.springframework.boot.test.context.SpringBootTest import org.springframework.test.web.reactive.server.WebTestClient import org.springframework.test.web.reactive.server.expectBody import org.springframework.test.web.servlet.MockMvc import org.springframework.test.web.servlet.request.MockMvcRequestBuilders import org.springframework.test.web.servlet.result.MockMvcResultMatchers @SpringBootTest @AutoConfigureMockMvc class MyMockMvcTests { @Test fun testWithMockMvc(@Autowired mvc: MockMvc) { mvc.perform(MockMvcRequestBuilders.get("/")).andExpect(MockMvcResultMatchers.status().isOk) .andExpect(MockMvcResultMatchers.content().string("Hello World")) } // Agar Spring WebFlux classpathda mavjud bo'lsa, WebTestClient yordamida MVC testlarini amalga oshirishingiz mumkin @Test fun testWithWebTestClient(@Autowired webClient: WebTestClient) { webClient .get().uri("/") .exchange() .expectStatus().isOk .expectBody<String>().isEqualTo("Hello World") } } 
Agar faqat veb-darajaga e'tibor berish kerak bo'lsa va to'liq ApplicationContextni yuklamaslik kerak bo'lsa, @WebMvcTest annotatsiyasini ko'rib chiqing.

Spring WebFlux da yakuniy nuqtalar bilan ishlash uchun WebTestClient dan foydalanish mumkin, quyidagi misolda ko'rsatilgani kabi:

Java
import org.junit.jupiter.api.Test; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.boot.test.autoconfigure.web.reactive.AutoConfigureWebTestClient; import org.springframework.boot.test.context.SpringBootTest; import org.springframework.test.web.reactive.server.WebTestClient; @SpringBootTest @AutoConfigureWebTestClient class MyMockWebTestClientTests { @Test void exampleTest(@Autowired WebTestClient webClient) { webClient .get().uri("/") .exchange() .expectStatus().isOk() .expectBody(String.class).isEqualTo("Hello World"); } } 
Kotlin
import org.junit.jupiter.api.Test import org.springframework.beans.factory.annotation.Autowired import org.springframework.boot.test.autoconfigure.web.reactive.AutoConfigureWebTestClient import org.springframework.boot.test.context.SpringBootTest import org.springframework.test.web.reactive.server.WebTestClient import org.springframework.test.web.reactive.server.expectBody @SpringBootTest @AutoConfigureWebTestClient class MyMockWebTestClientTests { @Test fun exampleTest(@Autowired webClient: WebTestClient) { webClient .get().uri("/") .exchange() .expectStatus().isOk .expectBody<String>().isEqualTo("Hello World") } } 

Taqlid muhitda test qilish odatda to'liq servlets konteyneridan foydalangan holda sinovdan o'tkazishdan tezroq o'tadi. Biroq, taqlid Spring MVC darajasida amalga oshirilganligini hisobga olgan holda, servlets konteynerining past darajadagi mantiqasiga asoslangan kodni to'g'ridan-to'g'ri MockMvc orqali tekshirib bo'lmaydi.

Masalan, Spring Boot da xatolarni ishlov berish servlets konteyner tomonidan taqdim etilgan "xatolar sahifasi" qo'llab-quvvatlashiga asoslangan. Bu esa shuni anglatadiki, MVC darajasi qanday qilib xatolarni yaratganini va qabul qilganini ishonch hosil qilishingiz mumkin, lekin maxsus xatolar sahifasi ko'rsatilayotganini to'g'ridan-to'g'ri ishonch hosil qilolmaysiz. Agar bu past darajadagi nozikliklarni sinab ko'rishni xohlasangiz, keyingi bo'limda ko'rsatilganidek, to'liq ishlaydigan serverni ishga tushirishga o'tishingiz mumkin.

To'liq ishlaydigan server yordamida test qilish

Agar siz to'liq ishlaydigan serverni ishlatmoqchi bo'lsangiz, tasodifiy portlardan foydalanishni tavsiya etamiz. Agar siz @SpringBootTest(webEnvironment=WebEnvironment.RANDOM_PORT) annotatsiyasini foydalansangiz, har bir test yugurishda tasodifiy port tanlanadi.

@LocalServerPort annotatsiyasini testda foydalanilgan portni kiritish uchun ishlatishingiz mumkin. REST chaqiruvlarini ishlatishi kerak bo'lgan testlar @Autowire annotatsiyasi orqali WebTestClient ni ulashi mumkin, va u ilova qilinadigan serverga nisbiy havolalarga yuqoridan foydalanishga imkon beradi va javoblarni tekshirish uchun maxsus API bilan jihozlangan, quyidagi misolda ko'rsatilgani kabi:

Java
import org.junit.jupiter.api.Test; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.boot.test.context.SpringBootTest; import org.springframework.boot.test.context.SpringBootTest.WebEnvironment; import org.springframework.test.web.reactive.server.WebTestClient; @SpringBootTest(webEnvironment = WebEnvironment.RANDOM_PORT) class MyRandomPortWebTestClientTests { @Test void exampleTest(@Autowired WebTestClient webClient) { webClient .get().uri("/") .exchange() .expectStatus().isOk() .expectBody(String.class).isEqualTo("Hello World"); } } 
Kotlin
import org.junit.jupiter.api.Test import org.springframework.beans.factory.annotation.Autowired import org.springframework.boot.test.context.SpringBootTest import org.springframework.boot.test.context.SpringBootTest.WebEnvironment import org.springframework.test.web.reactive.server.WebTestClient import org.springframework.test.web.reactive.server.expectBody @SpringBootTest(webEnvironment = WebEnvironment.RANDOM_PORT) class MyRandomPortWebTestClientTests { @Test fun exampleTest(@Autowired webClient: WebTestClient) { webClient .get().uri("/") .exchange() .expectStatus().isOk .expectBody<String>().isEqualTo("Hello World") } } 
WebTestClient haqiqiy serverlar va taqlid muhitlari uchun ishlatilishi mumkin.

Ushbu konfiguratsiya uchun spring-webflux classpathda bo'lishi kerak. Agar siz webfluxni qo'sha olmasangiz yoki qo'shiq qila olmasangiz, Spring Boot o'rniga TestRestTemplate dan foydalanish imkonini beradi:

Java
import org.junit.jupiter.api.Test; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.boot.test.context.SpringBootTest; import org.springframework.boot.test.context.SpringBootTest.WebEnvironment; import org.springframework.boot.test.web.client.TestRestTemplate; import static org.assertj.core.api.Assertions.assertThat; @SpringBootTest(webEnvironment = WebEnvironment.RANDOM_PORT) class MyRandomPortTestRestTemplateTests { @Test void exampleTest(@Autowired TestRestTemplate restTemplate) { String body = restTemplate.getForObject("/", String.class); assertThat(body).isEqualTo("Hello World"); } } 
Kotlin
import org.assertj.core.api.Assertions.assertThat import org.junit.jupiter.api.Test import org.springframework.beans.factory.annotation.Autowired import org.springframework.boot.test.context.SpringBootTest import org.springframework.boot.test.context.SpringBootTest.WebEnvironment import org.springframework.boot.test.web.client.TestRestTemplate @SpringBootTest(webEnvironment = WebEnvironment.RANDOM_PORT) class MyRandomPortTestRestTemplateTests { @Test fun exampleTest(@Autowired restTemplate: TestRestTemplate) { val body = restTemplate.getForObject("/", String::class.java) assertThat(body).isEqualTo("Hello World") } } 

WebTestClientni sozlash

Agar WebTestClient binini sozlamoqchi bo'lsangiz, WebTestClientBuilderCustomizer binini sozlang. Fuer bunday binlar WebTestClient.Builder orqali chaqiriladi, bu esa WebTestClient yaratish uchun ishlatiladi.

JMX dan foydalanish

Sinov konteksti freymvorki kontekstini keshlaydi, shuning uchun JMX texnologiyasi standart bo'yicha o'chirilgan, bir xil domenada bir xil komponentlar ro'yxatdan o'tishdan saqlanadi. Agar sinov MBeanServerga kirishni talab qilsa, uni iflos deb belgilash haqida o'ylab ko'ring:

Java
import javax.management.MBeanServer; import org.junit.jupiter.api.Test; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.boot.test.context.SpringBootTest; import org.springframework.test.annotation.DirtiesContext; import static org.assertj.core.api.Assertions.assertThat; @SpringBootTest(properties = "spring.jmx.enabled=true") @DirtiesContext class MyJmxTests { @Autowired private MBeanServer mBeanServer; @Test void exampleTest() { assertThat(this.mBeanServer.getDomains()).contains("java.lang"); // ... } } 
Kotlin
import org.assertj.core.api.Assertions.assertThat import org.junit.jupiter.api.Test import org.springframework.beans.factory.annotation.Autowired import org.springframework.boot.test.context.SpringBootTest import org.springframework.test.annotation.DirtiesContext import javax.management.MBeanServer @SpringBootTest(properties = ["spring.jmx.enabled=true"]) @DirtiesContext class MyJmxTests(@Autowired val mBeanServer: MBeanServer) { @Test fun exampleTest() { assertThat(mBeanServer.domains).contains("java.lang") // ... } } 

Metrlardan foydalanish

Classpathdan qat'iy nazar, ichki xotirada saqlanadigan hisoblagich reyestrlaridan tashqari, tasdiqlash uchun ro'yxatlar @SpringBootTest dan foydalanilganda avtomatik ravishda konfiguratsiya qilinmaydi.

Agar integratsiya testi doirasida metrikalarni boshqa backendga eksport qilish kerak bo'lsa, uni @AutoConfigureMetrics bilan belgilash kerak.

Izohlar
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION