JavaRush /Kurslar /All lectures for UZ purposes /TestContext frameworkining yordamchi sinflari

TestContext frameworkining yordamchi sinflari

All lectures for UZ purposes
Daraja, Dars
Mavjud

Spring'da JUnit 4'dan foydalanish

Spring TestContext Framework JUnit 4 bilan to'liq integratsiyani maxsus bajaruvchi (runner) orqali taklif qiladi (JUnit 4.12 yoki yuqori versiyalarida qo'llab-quvvatlanadi). Test sinflarini @RunWith(SpringJUnit4ClassRunner.class) yoki qisqartirilgan variant @RunWith(SpringRunner.class) bilan belgilab, dasturchilar JUnit 4 asosidagi modul va integratsiya testlarini amalga oshirishi va bir vaqtning o'zida TestContext frameworkining ilovalar kontekstlarini yuklash, testlarda bog'liqlikni kiritish, transaksion test metodlarini bajarishni qo'llab-quvvatlash va hokazo afzalliklaridan foydalanishlari mumkin. Agar siz Spring TestContext Frameworkni boshqa bajaruvchi bilan (masalan, JUnit 4dan Parameterized bajaruvchisi) yoki uchinchi tomon bajaruvchilari bilan (masalan, MockitoJUnitRunner) ishlatmoqchi bo'lsangiz, Springning qo'llab-quvvatlovchi vositalarini JUnit qoidalariga moslashtirilgan holda ishlatishingiz mumkin.

Quyidagi kod parchasida Spring'da maxsus Runner yordamida sinovni bajarishi uchun minimal qo'llanmalar ko'rsatilgan:

Java
@RunWith(SpringRunner.class)
@TestExecutionListeners({})
public class SimpleTest {
    @Test
    public void testMethod() {
        // test logikasi...
    }
}
Kotlin
@RunWith(SpringRunner::class)
@TestExecutionListeners
class SimpleTest {
    @Test
    fun testMethod() {
        // test logikasi...
    }
}

Oldingi namuna @TestExecutionListeners annotatsiyasi bo'sh ro'yxat bilan sozlangan, bu esa, @ContextConfiguration orqali ApplicationContextni konfiguratsiya qilishni talab qiluvchi standart tinglovchilarni o'chirib qo'yadi.

Spring JUnit 4 qoidalari

org.springframework.test.context.junit4.rules paketi quyidagi JUnit 4 qoidalarni taqdim etadi (JUnit 4.12 yoki yuqori versiyalarida qo'llab-quvvatlanadi):

  • SpringClassRule

  • SpringMethodRule

SpringClassRule JUnit'dan TestRule bo'lib, Spring TestContext Framework funksiyalarini sinf darajasida qo'llab-quvvatlaydi, SpringMethodRule esa JUnit'dan MethodRule bo'lib, Spring TestContext Framework funksiyalarini namuna va metod darajasida qo'llab-quvvatlaydi.

SpringRunnerdan farqli ravishda, Spring'dagi qoidalarga asoslangan JUnit qo'llab-quvvatlovchi vositalarining afzalligi shundaki, u org.junit.runner.Runner ning har qanday amalga oshirilishidan mustaqil hisoblanadi va shu sababli mavjud alternativ bajaruvchilar (masalan, JUnit 4'dan Parameterized) yoki uchinchi tomon bajaruvchilari (masalan, MockitoJUnitRunner) bilan birlashtirilishi mumkin.

TestContext frameworkining barcha funksiyalarini qo'llab-quvvatlash uchun SpringClassRuleni SpringMethodRule bilan birlashtirish kerak. Quyidagi misolda ushbu qoidalarni integratsiya testida qanday e'lon qilishni ko'rsatadi:

Java
// Maxsus Springdan bo'lmagan bajaruvchini @RunWith(...) orqali ixtiyoriy o'rnatish
@ContextConfiguration
public class IntegrationTest {
    @ClassRule
    public static final SpringClassRule springClassRule = new SpringClassRule();
    @Rule
    public final SpringMethodRule springMethodRule = new SpringMethodRule();
    @Test
    public void testMethod() {
        // test logikasi...
    }
}
Kotlin
// Maxsus Springdan bo'lmagan bajaruvchini @RunWith(...) orqali ixtiyoriy o'rnatish
@ContextConfiguration
class IntegrationTest {
    @Rule
    val springMethodRule = SpringMethodRule()
    @Test
    fun testMethod() {
        // test logikasi...
    }
    companion object {
        @ClassRule
        val springClassRule = SpringClassRule()
    }
}

JUnit 4 yordamchi sinflar

org.springframework.test.context.junit4 paketi JUnit 4 test holatlari uchun quyidagi yordamchi sinflarni taqdim etadi (JUnit 4.12 yoki yuqori versiyalarida qo'llab-quvvatlanadi):

  • AbstractJUnit4SpringContextTests

  • AbstractTransactionalJUnit4SpringContextTests

AbstractJUnit4SpringContextTests bu abstrakt sinf bo'lib, Spring TestContext Frameworkni JUnit 4 muhitida ApplicationContext testi uchun aniq qo'llab-quvvatlaydi. Agar siz AbstractJUnit4SpringContextTestsni kengaytirsangiz, siz protected sinf o'zgaruvchi applicationContext orqali bemalol foydalanishingiz mumkin va bu konteks holatini test qilish yoki beanlarni izlash uchun ishlatilishi mumkin.

AbstractTransactionalJUnit4SpringContextTests – AbstractJUnit4SpringContextTestsning abstrakt kengaytmali transaksion sinfidir, bo'lib bu JDBCga kirishni optimallash va qulaylik keltiradi. Ushbu sinfda javax.sql.DataSource va PlatformTransactionManager binlari ApplicationContextda aniqlanishini kutadi. Agar siz AbstractTransactionalJUnit4SpringContextTestsni kengaytirsangiz, yuqorida keltirilgan jdbcTemplate orqali protected sinf o'zgaruvchi orqali SQL buyruqlarini bajarish va ma'lumotlar bazasini tekshirish uchun foydalanishingiz mumkin. Ushbu so'rovlar ma'lumotlar bazasi bilan bog'liq ilova kodini bajarishdan oldin va keyin ishlatilishi mumkin, va Spring ma'lum bir tranzaktsiya uchun ushbu so'rovlar bajarilishini ta'minlaydi. ORM vositasi bilan birgalikda foydalanilganda noto'g'ri pozitivlardan qochish tavsiya etiladi. "JDBC testini qo'llab-quvvatlash" bo'limida aytib o'tilganidek, AbstractTransactionalJUnit4SpringContextTests shuningdek JdbcTestUtilsga delegatsiya qilish uchun yordamchi metodlarni taqdim etadi va yuqorida aytib o'tilgan jdbcTemplate orqali executeSqlScript(..) SQL skriptlarini bajarish imkoniyatini beradi.

Bu sinflar kengaytma uchun yordamchi vositalardir. Agar sizning test sinflaringiz Springga xos bo'lgan sinf iyerarxiyasiga bog'lanishi kerak bo'lmasa, siz o'z maxsus test sinflaringizni @RunWith(SpringRunner.class) yoki Spring uchun JUnit qoidalari yordamida sozlashingiz mumkin.

JUnit Jupiter uchun SpringExtension

Spring TestContext Framework test frameworki JUnit Jupiter bilan to'liq integratsiyani taklif qiladi, bu JUnit 5 da kiritilgan. Sinf testlarini @ExtendWith(SpringExtension.class) bilan belgilab, siz JUnit Jupiter asosidagi modul va integratsiya testlarini amalga oshirishingiz va bir vaqtning o'zida TestContext frameworkining afzalliklaridan foydalanishingiz mumkin, masalan, ilova kontekstlarini yuklashni qo'llab-quvvatlash, testlarda bog'liqlikni kiritish, transaksion test metodlarini qo'llab-quvvatlash va hokazo.

Bundan tashqari, JUnit Jupiter'dagi kengaytma API interfeysining boyligi tufayli, Spring quyidagi imkoniyatlarni taklif etadi, bu Spring tomonidan qo'llab-quvvatlanadigan JUnit 4 va TestNG funktsiyalar to'plamidan ustundir:

  • Test konstruktorlari, test metodlari va test hayotiy davri qayta chaqiruvchi metodlari uchun bog'liqlikni kiritish. Batalik ma'lumotni SpringExtension yordamida kiritish bo'limidan ko'rishingiz mumkin.

  • Shartli testlar bajarilishini to'liq qo'llab-quvvatlash SpEL ifodalari, atrof-muhit o'zgaruvchilari, tizim xususiyatlari va hkz. asosida. Batalik ma'lumot va misollarni "Spring'ta test qilish uchun JUnit Jupiter annotatsiyalari" bo'limida @EnabledIf va @DisabledIf annotatsiyalari haqida qo'shimcha ma'lumot oling.

  • Spring va JUnit Jupiter'dan annotatsiyalarni birlashtirgan maxsus kompozitli annotatsiyalar. @TransactionalDevTestConfig va @TransactionalIntegrationTest annotatsiyalar misollariga "Testlash uchun metaanotatsiyalarni qo'llab-quvvatlash" bo'limidan ko'proq ma'lumot oling.

Quyidagi kod parchasida SpringExtensionni @ContextConfiguration bilan birgalikda ishlatish uchun sinf testini qanday konfiguratsiya qilish ko'rsatilgan:

Java
// JUnit Jupiterni Spring yordam vositalari bilan kengaytirishingizni buyuramiz.
@ExtendWith(SpringExtension.class)
// Springga TestConfig.class dan ApplicationContext yuklashini buyuramiz
@ContextConfiguration(classes = TestConfig.class)
class SimpleTests {
    @Test
    void testMethod() {
        // test logikasi...
    }
}
Kotlin
// JUnit Jupiterni Spring yordam vositalari bilan kengaytirishingizni buyuramiz.
@ExtendWith(SpringExtension::class)
// Springga TestConfig.class dan ApplicationContext yuklashini buyuramiz
@ContextConfiguration(classes = [TestConfig::class])
class SimpleTests {
    @Test
    fun testMethod() {
        // test logikasi...
    }
}

JUnit 5 hamda meta-annotatsiyalarni qo'llash mumkin bo'lganligi sababli, Spring ApplicationContextni osonroq konfiguratsiya qilish uchun @SpringJUnitConfig va @SpringJUnitWebConfig kompozit annotatsiyalarini taqdim etadi.

Quyidagi misolda @SpringJUnitConfig annotatsiyasi oldingi misolda ishlatilgan konfiguratsiyani qisqartirish uchun ishlatilgan:

Java
// Springga SpringExtensionni JUnit'ta
// Jupiterda ro'yxatdan o'tkazishni va TestConfig.classdan ApplicationContext yuklashni buyuramiz
@SpringJUnitConfig(TestConfig.class)
class SimpleTests {
    @Test
    void testMethod() {
        // test logikasi...
    }
}
Kotlin
// Springga SpringExtensionni JUnit'ta
// Jupiterda ro'yxatdan o'tkazishni va TestConfig.classdan ApplicationContext yuklashni buyuramiz
@SpringJUnitConfig(TestConfig::class)
class SimpleTests {
    @Test
    fun testMethod() {
        // test logikasi...
    }
}

Xuddi shunday, quyidagi misolda @SpringJUnitWebConfig annotatsiyasi JUnit Jupiter bilan ishlatish uchun WebApplicationContext yaratish uchun ishlatilgan:

Java
// Springga SpringExtensionni JUnit'ta
// Jupiterda ro'yxatdan o'tkazishni va TestWebConfig.classdan WebApplicationContext yuklashni buyuramiz
@SpringJUnitWebConfig(TestWebConfig.class)
class SimpleWebTests {
    @Test
    void testMethod() {
        // test logikasi...
    }
}
Kotlin
// Springga SpringExtensionni JUnit'ta
// Jupiterda ro'yxatdan o'tkazishni va TestWebConfig.classdan WebApplicationContext yuklashni buyuramiz
@SpringJUnitWebConfig(TestWebConfig::class)
class SimpleWebTests {
    @Test
    fun testMethod() {
        // test logikasi...
    }
}

@SpringJUnitConfig va @SpringJUnitWebConfig haqida qo'shimcha ma'lumotlar uchun "Spring'ta testlash uchun JUnit Jupiter annotatsiyalari" bo'limiga qarang.

SpringExtension yordamida bog'liqlikni kiritish

SpringExtension JUnit Jupiter'dan ParameterResolver kengaytma API interfeysini amalga oshiradi, bu Springga test konstruktorlari, test metodlari va test hayotiy davri qayta chaqiruvchi metodlariga bog'liqlikni kiritish imkonini beradi.

Xususan, SpringExtension testning ApplicationContextdan test konstruktori va @BeforeAll, @AfterAll, @BeforeEach, @AfterEach, @Test, @RepeatedTest, @ParameterizedTest va boshqa annotatsiyalar bilan belgilangan metodlarga bog'liqlikni kiritishi mumkin.

Konstruktor orqali bog'liqlikni kiritish

Agar JUnit Jupiter'dagi test sinfining konstruktori ma'lum bir parametrga ega bo'lsa va bu parametr turi ApplicationContext (yoki uning ost turi) bo'lsa yoki @Autowired, @Qualifier yoki @Value bilan annotatsiya qilingan yoki meta-annotatsiya qilingan bo'lsa, Spring ushbu parametrni ApplicationContextdan mos keladigan bean yoki qiymatni ishlatib kiritadi.

Spring, shuningdek, test sinfining avtomatik bog'liqlikni aniqlovchi va bog'laydigan barcha konstruktur parametrlarini avtomatik ravishda aniqlash va bog'lash uchun sozlanishi mumkin, agar konstruktor avto bog'lanadigan deb hisoblangan bo'lsa. Konstruktor quyidagi shartlardan biri (usto'zlik tizimida) mavjud bo'lsa avtomatik bog'lanadigan deb hisoblanadi.

  • Konstruktor @Autowired bilan annotatsiya qilingan.

  • @TestConstructor annotatsiyasi yoki meta-annotatsiyasi test sinfida mavjud bo'lib, autowireMode atribut ALLga o'rnatilgan.

  • Test konstruktori avtomatik aniqlash va bog'lash rejimini sukut bo'yicha ALLga o'zgartirilgan.

@TestConstructor annotatsiyasidan foydalanish haqida va global test konstruktori avtomatik aniqlash va bog'lash rejimini qanday o'zgartirish haqida batafsil ma'lumotni @TestConstructor bo'limidan oling.

Agar test sinfi uchun konstruktor avto bog'lanadigan deb hisoblangan bo'lsa, Spring konstruktur uchun barcha parametrlar uchun argumentlarni aniqlashni o'z zimmasiga oladi. Shunday qilib, JUnit Jupiter'da ro'yxatdan o'tgan boshqa ParameterResolver bu konstruktur uchun parametrlarga ruxsat bera olmaydi.

Konstruktor orqali bog'liqlikni kiritishda @TestInstance(PER_CLASS) annotatsiyasi bilan mos keladigan JUnit Jupiter annotatsiyalaridan foydalangan holda, agar test ApplicationContextni test metodlaridan oldin yoki keyin yopish uchun @DirtiesContext annotatsiyasi ishlatilsa, foydalanish mumkin emas.

Sabab shundaki, @TestInstance(PER_CLASS) annotatsiyasi JUnit Jupiterga test metodini chaqiruvlar o'rtasida test misolini keshlashni buyuradi. Shunday qilib, test misoli ilgari ApplicationContextdan kiritilgan beanlar bilan bog'lanadi, bu esa yopilgan kontekstga obuna bo'lib qoladi. Bunday stsenariylarda test sinfining konstrukturini faqat bir marta chaqirish mumkin bo'lganligi sababli, bog'liqlikni kiritish takrorlanmaydi va keyingi testlar yopilgan ApplicationContextdan beanlar bilan o'zaro ta'sir qilishi mumkin, bu esa xatolarga olib kelishi mumkin.

@DirtiesContext annotatsiyasidan "test metodi oldidan" yoki "test metodi keyin" rejimida va @TestInstance(PER_CLASS) annotatsiyasi bilan birgalikda foydalanish uchun Springdan bog'liqliklarni ulardan foydalanishni seans orqali yoki setr orqali olish uchun sozlash kerak, shunda ular test metodi chaqirishlar o'rtasida takroran kiritilishi mumkin.

Quyidagi misolda Spring OrderServiceni ApplicationContextdan, TestConfig.classdan yuklangan holda, OrderServiceIntegrationTests konstrukturiga kiritadi.

Java
@SpringJUnitConfig(TestConfig.class)
class OrderServiceIntegrationTests {
    private final OrderService orderService;
    @Autowired
    OrderServiceIntegrationTests(OrderService orderService) {
        this.orderService = orderService;
    }
    // kiritilgan OrderServicega asoslangan testlar
}
Kotlin
@SpringJUnitConfig(TestConfig::class)
class OrderServiceIntegrationTests @Autowired constructor(private val orderService: OrderService){
    // kiritilgan OrderServicega asoslangan testlar
}

Ushbu funksiyadan foydalanish test bog'liqliklarini final bo'lib, shuning bilan o'zgarmas bo'lishini ta'minlaydi.

Agar spring.test.constructor.autowire.mode xususiyati all qiymatini oladigan bo'lsa (qarang @TestConstructor), oldingi misoldagi konstruktur uchun @Autowired annotatsiyasini e'lon qilishni o'tkazib yuborishingiz mumkin, bu quyidagicha natijani beradi.

Java
@SpringJUnitConfig(TestConfig.class)
class OrderServiceIntegrationTests {
    private final OrderService orderService;
    OrderServiceIntegrationTests(OrderService orderService) {
        this.orderService = orderService;
    }
    // kiritilgan OrderServicega asoslangan testlar
}
Kotlin
@SpringJUnitConfig(TestConfig::class)
class OrderServiceIntegrationTests(val orderService:OrderService) {
    // kiritilgan OrderServicega asoslangan testlar
}
Metod orqali bog'liqlikni kiritish

Agar JUnit Jupiter'dagi test metodining parametri yoki test hayotiy davri qayta chaqiruvchi metodining parametri turi ApplicationContext (yoki uning ost turi) bo'lsa yoki @Autowired, @Qualifier yoki @Value bilan annotatsiya qilingan yoki meta-annotatsiya qilingan bo'lsa, Spring ushbu parametr uchun ApplicationContextdan mos keladigan bean yoki qiymatdan foydalanib bog'liqlikni kiritadi.

Quyidagi misolda Spring OrderServiceni ApplicationContextdan, TestConfig.classdan yuklangan holda, deleteOrder() test metodiga kiritadi:

Java
@SpringJUnitConfig(TestConfig.class)
class OrderServiceIntegrationTests {
    @Test
    void deleteOrder(@Autowired OrderService orderService) {
        // testning ApplicationContextdan orderService'dan foydalanamiz
    }
}
Kotlin
@SpringJUnitConfig(TestConfig::class)
class OrderServiceIntegrationTests {
    @Test
    fun deleteOrder(@Autowired orderService: OrderService) {
        // testning ApplicationContextdan orderService'dan foydalanamiz
    }
}

JUnit Jupiter'dagi ParameterResolver ning kuchli qo'llab-quvvatlashi tufayli, Springga va JUnit Jupiter yoki boshqa uchinchi tomon kengaytmalari bilan birgalikda bir nechta bog'liqlikni bir vaqtning o'zida metoqa kiritish mumkin.

Quyidagi misolda Spring va JUnit Jupiter bir vaqtning o'zida test metodiga placeOrderRepeatedly() bog'liqlarini kiritish mumkinligini ko'rsatadi.

Java
@SpringJUnitConfig(TestConfig.class)
class OrderServiceIntegrationTests {
    @RepeatedTest(10)
    void placeOrderRepeatedly(RepetitionInfo repetitionInfo,
            @Autowired OrderService orderService) {
        // testning ApplicationContextdan orderService'dan foydalanamiz
        // va JUnit Jupiternin repetitionInfo
    }
}
Kotlin
@SpringJUnitConfig(TestConfig::class)
class OrderServiceIntegrationTests {
    @RepeatedTest(10)
    fun placeOrderRepeatedly(repetitionInfo:RepetitionInfo, @Autowired orderService:OrderService) {
        // testning ApplicationContextdan orderService'dan foydalanamiz
        // va JUnit Jupiternin repetitionInfo
    }
}

Quyidagi misolda @RepeatedTest annotatsiyasidan foydalanish JUnit Jupiterga RepetitionInfo ga kirishni imkoniyat beradi.

Kiritilgan test sinfi konfiguratsiyasi @Nested annotatsiyasi bilan

Spring TestContext Framework 5.0 versiyasidan boshlab JUnit Jupiter'dagi @Nested annotatsiya bo'lgan test sinflari uchun maxsus test annotatsiyalarini qo'llab-quvvatlaydi; ammo, Spring Framework 5.3 oldinidagi test sinfi konfiguratsiyalari kiritilgan sinflaridan sinf superklasslaridan meros olinmagan.

Spring Framework 5.3 dan boshlab, kiritilgan sinflardan meros qilinadigan test sinfi konfiguratsiyasini to'liq qo'llab-quvvatlash tatbiq etildi va bu konfiguratsiya odatda meros qilib olinadi. INHERIT odatiy rejimini OVERRIDE rejimiga o'zgartirish uchun @Nested annotatsiya bo'lgan alohida test sinflarini @NestedTestConfiguration(EnclosingConfiguration.OVERRIDE) bilan belgilashingiz mumkin. @NestedTestConfiguration ni aniq e'lon qilish annotatsiyalangan test sinfiga va uning barcha sinflari va kiritilgan sinfiga qo'llaniladi. Shunday qilib, yuqori darajali test sinfini @NestedTestConfiguration annotatsiyasi bilan belgilashingiz mumkin va bu barcha kiritilgan test sinflari uchun rekursiv ravishda qo'llaniladi.

Dasturchi jamoalari 5.3 versiyasidan oldingi Spring Framework versiyalari bilan mos keladigan OVERRIDEni sukut bo'yicha o'zgartirishlari uchun, sukut bo'yicha rejimni JVM tizim xususiyati yoki spring.properties faylini o'zgartirish orqali global tarzda o'zgartirish mumkin. Batafsil ma'lumot "Noto'g'ri musbatlar uchun kontekst rejimini o'zgartirish" bo'limiga qarang>.

Garchi quyidagi "Hello World" misoli juda soddalashtirilgan bo'lsa ham, u yuqori darajali sinf uchun konfiguratsiyani qanday e'lon qilishni va bu kiritilgan test sinflariga meros bo'lishini ko'rsatadi. Ushbu misolda faqat TestConfig konfiguratsiya sinfini meros qilib olinadi. Har bir kiritilgan test sinfi o'z faol profil to'plamini taqdim etadi, buning natijasida har bir kiritilgan test sinfi uchun alohida ApplicationContext yaratiladi (batafsil ma'lumot "Kontekstni keshlash" bo'limiga qarang). Mavjud bo'lgan qo'llab-quvvatlanadigan annotatsiyalar ning ro'yxati bilan tanishing, kiritilgan @Nested annotatsiyalari uchun qaysi annotatsiyalar meros qilib olinishi mumkinligini bilib oling.

Java
@SpringJUnitConfig(TestConfig.class)
class GreetingServiceTests {
    @Nested
    @ActiveProfiles("lang_en")
    class EnglishGreetings {
        @Test
        void hello(@Autowired GreetingService service) {
            assertThat(service.greetWorld()).isEqualTo("Hello World");
        }
    }
    @Nested
    @ActiveProfiles("lang_de")
    class GermanGreetings {
        @Test
        void hello(@Autowired GreetingService service) {
            assertThat(service.greetWorld()).isEqualTo("Hallo Welt");
        }
    }
}
Kotlin
@SpringJUnitConfig(TestConfig::class)
class GreetingServiceTests {
    @Nested
    @ActiveProfiles("lang_en")
    inner class EnglishGreetings {
        @Test
        fun hello(@Autowired service:GreetingService) {
            assertThat(service.greetWorld()).isEqualTo("Hello World")
        }
    }
    @Nested
    @ActiveProfiles("lang_de")
    inner class GermanGreetings {
        @Test
        fun hello(@Autowired service:GreetingService) {
            assertThat(service.greetWorld()).isEqualTo("Hallo Welt")
        }
    }
}

TestNG yordamchi sinflari

org.springframework.test.context.testng paketi TestNG asosidagi test holatlari uchun quyidagi yordamchi sinflarni taqdim etadi:

  • AbstractTestNGSpringContextTests

  • AbstractTransactionalTestNGSpringContextTests

AbstractTestNGSpringContextTests bu ApplicationContext testi uchun Spring TestContext Frameworkni TestNG muhitiga aniq qo'llab-quvvatlaydigan abstrakt sinfidir. Agar siz AbstractTestNGSpringContextTestsni kengaytirsangiz, siz protected sinf o'zgaruvchi applicationContext orqali bemalol foydalanishingiz mumkin va bu konteks holatini test qilish yoki beanlarni izlash uchun ishlatilishi mumkin.

AbstractTransactionalTestNGSpringContextTests – AbstractTestNGSpringContextTestsning abstrakt kengaytmali transaksion sinfidir, bo'lib bu JDBCga kirishni optimallash va qulaylik keltiradi. Ushbu sinfda javax.sql.DataSource va PlatformTransactionManager binlari ApplicationContextda aniqlanishini kutadi. Agar siz AbstractTransactionalTestNGSpringContextTestsni kengaytirsangiz, yuqorida keltirilgan jdbcTemplate orqali protected sinf o'zgaruvchi orqali SQL buyruqlarini bajarish va ma'lumotlar bazasini tekshirish uchun foydalanishingiz mumkin. Ushbu so'rovlar ma'lumotlar bazasi bilan bog'liq ilova kodini bajarishdan oldin va keyin ishlatilishi mumkin, va Spring ma'lum bir tranzaktsiya uchun ushbu so'rovlar bajarilishini ta'minlaydi. ORM vositasi bilan birgalikda foydalanilganda noto'g'ri pozitivlardan qochish tavsiya etiladi. "JDBC testini qo'llab-quvvatlash" bo'limida aytib o'tilganidek, AbstractTransactionalTestNGSpringContextTests shuningdek JdbcTestUtilsga delegatsiya qilish uchun yordamchi metodlarni taqdim etadi va yuqorida aytib o'tilgan jdbcTemplate orqali executeSqlScript(..) SQL skriptlarini bajarish imkoniyatini beradi.

Bu sinflar kengaytma uchun yordamchi vositalardir. Agar sizning test sinflaringiz Springga xos bo'lgan sinf iyerarxiyasiga bog'lanishi kerak bo'lmasa, siz @ContextConfiguration, @TestExecutionListeners va hokazo annotatsiyalardan foydalanib, maxsus test sinflarini sozlashingiz va TestContextManager dan foydalanib, sinf testini qo'lda instrumentatsiya qilishingiz mumkin. Siz AbstractTestNGSpringContextTestsning manba kodiga qarab, sinf testini qanday instrumentatsiya qilishni o'rganishingiz mumkin.
Izohlar
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION