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
WebApplicationContextyuklanganligiga ishonch hosil qiling, test sinfingizni@WebAppConfigurationbilan 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:
<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:
@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
}
}
@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:
<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:
@SpringJUnitWebConfig
class SessionScopedBeanTests {
@Autowired UserService userService;
@Autowired MockHttpSession session;
@Test
void sessionScope() throws Exception {
session.setAttribute("theme", "blue");
Results results = userService.processUserPreferences();
// natijalarni tasdiqlaymiz
}
}
@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
}
}
GO TO FULL VERSION