JavaRush /Kurslar /All lectures for UZ purposes /Soʻrovlar va sessiyalar doirasidagi binlarni sinash

Soʻrovlar va sessiyalar doirasidagi binlarni sinash

All lectures for UZ purposes
Daraja, Dars
Mavjud

Spring soʻrov va sessiya darajasidagi doirada ishlaydigan binlarni ilgari versiyalardan beri qo‘llab-quvvatlaydi, shuning uchun siz quyidagi qadamlar orqali bunday binlarni sinab ko'rishingiz mumkin:

  • Testingiz uchun WebApplicationContext yuklanganligiga ishonch hosil qiling, test sinfingizni @WebAppConfiguration bilan anotatsiya qiling.

  • Moq qilinuvchi so‘rov yoki sessiyani test namunangizga qo‘shing va tegishli ravishda test muhitini tayyorlang.

  • Qo‘shimchalar kiritilgan WebApplicationContextdan olingan veb-komponentingizni chaqiring (qo‘shimchalar kiritish orqali).

  • Moq qilingan obyektlarga oid tasdiqlarni bajaring.

Keyingi kod parchasida tizimga kirish foydalanish holati uchun XML-konfiguratsiya koʻrsatilgan. Eʼtibor bering, userService bin soʻrov darajasidagi doirada joylashgan loginAction binidan qaramdir. Bundan tashqari, LoginAction namuna joriy HTTP-so'rovdan foydalanuvchi nomi va parolni olish orqali SpEL tilidagi ifodalar orqali yaratiladi. Testimizda biz ushbu so'rov parametrlarini TestContext freymi tomonidan boshqariladigan moq obyekti orqali sozlashimiz kerak. Keyingi ro‘yxatda ushbu foydalanish holati uchun konfiguratsiya koʻrsatilgan:

So‘rov darajasidagi doirada ishlaydigan bin konfiguratsiyasi
<beans>
    <bean id="userService" class="com.example.SimpleUserService"
            c:loginAction-ref="loginAction"/>
    <bean id="loginAction" class="com.example.LoginAction"
            c:username="#{request.getParameter('user')}"
            c:password="#{request.getParameter('pswd')}"
            scope="request">
        <aop:scoped-proxy/>
    </bean>
</beans>

RequestScopedBeanTests da biz UserService (ya'ni, test qilinayotgan obyekt) va MockHttpServletRequest ni test namunamizga qo‘shamiz. requestScope() test metodida biz MockHttpServletRequest da so'rov parametrlari orqali test muhitini sozlaymiz. Agar bizning userService uchun loginUser() usuli chaqirilsa, biz maxsus xizmat joriy MockHttpServletRequest uchun so‘rov darajasidagi doirada joylashgan loginAction biniga murojaat qilishiga ishonch hosil qilamiz (ya'ni, biz faqatgina parametrlarni o'rnatganimizda). Shundan so'ng, foydalanuvchi nomi va parol uchun ma'lum kirish ma'lumotlariga asoslangan natijalar bo'yicha tasdiqlarni bajarishimiz mumkin. Keyingi ro‘yxatda buni qanday amalga oshirish ko'rsatilgan:

Java
@SpringJUnitWebConfig
class RequestScopedBeanTests {
    @Autowired UserService userService;
    @Autowired MockHttpServletRequest request;
    @Test
    void requestScope() {
        request.setParameter("user", "enigma");
        request.setParameter("pswd", "$pr!ng");
        LoginResults results = userService.loginUser();
        // natijalarni tasdiqlaymiz
    }
}
Kotlin
@SpringJUnitWebConfig
class RequestScopedBeanTests {
    @Autowired lateinit var userService: UserService
    @Autowired lateinit var request: MockHttpServletRequest
    @Test
    fun requestScope() {
        request.setParameter("user", "enigma")
        request.setParameter("pswd", "\$pr!ng")
        val results = userService.loginUser()
        // natijalarni tasdiqlaymiz
    }
}

Keyingi kod parchasida so‘rov darajasidagi doirada ishlaydigan bin uchun ko‘rganimizga o‘xshash kod parchasini ko‘ramiz. Lekin bu safar userService bin sessiya darajasida ishlaydigan userPreferences binidan qaram. Eʼtibor bering, UserPreferences bin namunasini SpEL tilidagi ifodasi orqali, joriy HTTP-sessiyadan mavzuni oladi. Testimizda mavzuni TestContext freymi tomonidan boshqariladigan moq sessiyasida sozlashimiz kerak. Keyingi misolda buni qanday amalga oshirish ko'rsatilgan:

Sessiya darajasida ishlaydigan bin konfiguratsiyasi
<beans>
    <bean id="userService" class="com.example.SimpleUserService"
            c:userPreferences-ref="userPreferences" />
    <bean id="userPreferences" class="com.example.UserPreferences"
            c:theme="#{session.getAttribute('theme')}"
            scope="session">
        <aop:scoped-proxy/>
    </bean>
</beans>

SessionScopedBeanTests da biz UserService va MockHttpSession ni test namunasiga qo‘shamiz. sessionScope() test metodida biz test muhitimizni MockHttpSession ga kiritilgan mavzuni o‘rnatish orqali sozlaymiz. Agar bizning userService uchun processUserPreferences() usuli chaqirilsa, biz maxsus xizmat joriy MockHttpSession uchun sessiya darajasida ishlaydigan userPreferences biniga murojaat qilishiga ishonch hosil qilamiz va konfiguratsiya qilingan mavzu asosida natijalar bo'yicha tasdiqlar bajarishimiz mumkin. Keyingi misolda buni qanday amalga oshirish ko'rsatilgan:

Java
@SpringJUnitWebConfig
class SessionScopedBeanTests {
    @Autowired UserService userService;
    @Autowired MockHttpSession session;
    @Test
    void sessionScope() throws Exception {
        session.setAttribute("theme", "blue");
        Results results = userService.processUserPreferences();
        // natijalarni tasdiqlaymiz
    }
}
Kotlin
@SpringJUnitWebConfig
class SessionScopedBeanTests {
    @Autowired lateinit var userService: UserService
    @Autowired lateinit var session: MockHttpSession
    @Test
    fun sessionScope() {
        session.setAttribute("theme", "blue")
        val results = userService.processUserPreferences()
        // natijalarni tasdiqlaymiz
    }
}
Izohlar
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION