Unit тестирлөө

All lectures for KY purposes
Деңгээл , Сабак
жеткиликтүү

Көз карандычылыкты киргизүү кодду контейнерге көз каранды эмес кылуусу керек, Java EE менен салттуу өнүктүрүү учурларында мындай болмок. Сиздин колдонмоңуздагы POJO объектилери TestNG же JUnit менен тесттеге жарамдуу болушу керек, жана Spring же башка контейнерлерсиз, new операторун колдонуп түзүлгөн объектилери менен. Сиз mock objects колдоно аласыз (башка пайдалуу тестирлөө ыкмалары менен) кодду изоляцияда тестирлөө үчүн. Эгерде Spring архитектурасынын көрсөтмөлөрүн аткарсаңыз, натыйжада көп катмарлуу жана компонентке бөлүнгөн код базасын ала аласыз, бул модулдук тестирлөөнү жеңилдетет. Мисалы, кызмат деңгээлүндөгү объектилерди тестирлөө DAO интерфейстери же сактагычтардан жасалган mock объектилерин колдонуу менен жүргүзүлүшү мүмкүн, жана модуль тесттерин аткарууда сакталган маалыматтарга кирүүнүн кереги жок болот.

Чыныгы модуль тесттери адатта абдан тез аткарылат, анткени аткаруу чөйрөнүн инфраструктурасын түзүүнүн кереги жок. Чыныгы модуль тесттерине көңүл буруу, өнүктүрүү методологиясынын бир бөлүгү катары, өндүрүмдүүлүктү жогорулата алат. Балким, сизге IoC негизиндеги колдонмолор үчүн эффективдүү модулдук тесттерди жазуу керек болбой калат. Бирок, айрым сценарийлер үчүн Spring Framework mock объектилерин жана жардамчы тестирлөө класстарын берет, алар ушул бөлүмдө каралат.

Mock объектиси

Spring объектилерин mock кылуу үчүн арналган бир нече пакеттери бар:

  • Орточоо

  • JNDI

  • Servlet API интерфейси

  • Spring Web Reactive модулу

Орточоо

org.springframework.mock.env пакети Environment жана PropertySource абстракцияларын mock кылган ишке ашырууларын камтыйт (караңыз "Bean аныктамасынын профилдери" жана "Абстракция PropertySource" бөлүмдөрүн). MockEnvironment жана MockPropertySource орточоо өзгөчөлүктөрүн көз каранды код үчүн контейнерсиз тесттерди иштеп чыгуу үчүн пайдалуу.

JNDI

org.springframework.mock.jndi пакети, JNDI үчүн SPI интерфейси жарым-жартылай ишке ашырылган, тесттик комплекттер же автономдуу колдонмолор үчүн жөнөкөй JNDI чөйрөсүн түзүү үчүн колдоно аласыз. Эгерде, мисалы, JDBC дан DataSource экземплярлары тесттик коддо жана Java EE контейнеринде бирдей JNDI аталыштарына байланган болсо, андан көрө колдонмо кодун жана конфигурациясын тест сценарийлеринде өзгөрүүсүз эле колдонсо болот.

JNDI mock объектилерине org.springframework.mock.jndi пакетинде Spring Framework 5.2 версиясынан тартып расмий түрдө колдоо көрсөтүү токтотулган, жана үчүнчү тараптын даяр чечимдерине басым жасалган, мисалы Simple-JNDI.

Servlet API интерфейси

org.springframework.mock.web пакети Servlet API интерфейсинин mock объекттеринин толук комплектин камтыйт, алар веб-контексттерди, контроллерлерди жана фильтрлерди тестирлөө үчүн пайдалуу. Бул mock объектилер Spring Web MVC фреймворку менен колдонууга, жана жалпы түрдө динамикалык mock объектилерге (мисалы, EasyMock) же Servlet API альтернативалык mock объектилерине (мисалы, MockObjects) караганда ыңгайлуу.

Spring Framework 5.0 версиясынан баштап, org.springframework.mock.web ичиндеги mock объекттер Servlet API 4.0го негизделген.

Spring MVC Test инфраструктурасы Servlet API mock объекттерине негизделген жана Spring MVC үчүн интеграциялык тестирлөө чөйрөсүн камсыз кылат. "MockMvc" бөлүмүн караңыз.

Spring Web Reactive модулу

org.springframework.mock.http.server.reactive пакети ServerHttpRequest жана ServerHttpResponse для WebFlux колдонмолорун колдонууга mock ишке ашырууларын камтыйт. org.springframework.mock.web.server пакети, бул mock суроо жана жооп объекттерине көз каранды болгон ServerWebExchange mock объектин камтыйт.

Both MockServerHttpRequest and MockServerHttpResponse share base abstract classes with specific server implementations and share common logic. For example, the mock request object becomes immutable after creation, but you can use the mutate() method from ServerHttpRequest to create a modified instance.

To properly implement the contract for writing the mock response object and return a completion write descriptor (i.e., Mono<Void>), it uses a Flux with cache().then() by default, which buffers the data and makes it available for assertions in tests. Applications can set a specific write function (e.g., for checking an endless stream).

The WebTestClient is based on the mock request and response object and provides support for testing WebFlux applications without an HTTP server. The client part can also be used for end-to-end testing with a running server.

Модульдук тестирлөө үчүн жардамчы класстар

Spring модулдук тестирлөөдө жардам берүүчү бир катар класстарды камтыйт. Алар эки категорияга бөлүнөт:

  • Жалпы максаттагы тестинг утилиталары

  • Spring MVC тестинг утилиталары

Жалпы максаттагы тестинг утилиталары

org.springframework.test.util пакети модулдук жана интеграциялык тестирлөөдө колдонуу үчүн бир нече жалпы максаттагы утилиталарды камтыйт.

ReflectionTestUtils – бул рефлексияга негизделген кызматтык методдордун жыйындысы. Бул методдорду тест сценарийлеринде, эгер константа маанисин өзгөртүш керек болсо, non-public талааны орнотуу керек болсо, же non-public конфигурация же жашоо циклинин чакырып өткөрүү методун чакыруу керек болсо колдонсоңуз болот, колдонмо кодун тестирлөөдө:

  • ORM фреймворктору (мисалы, JPA жана Hibernate), алар private же protected талааларына, public предметтик домендин өркүндөтү ордуна, уруксат беришет.

  • Spring аннотацияларын колдоо (мисалы @Autowired, @Inject жана @Resource), алар dependency injectionди private же protected талаалар, өркүндөтүүлөр жана конфигурациялык методдор үчүн ишке ашырат.

  • Аннотацияларды колдонуу, мисалы @PostConstruct жана @PreDestroy жашоо циклинин чакырып өткөрүү үчүн.

AopTestUtils – бул АОПго байланыштуу кызматтык методдордун жыйындысы. Сиз бул методдорду бир же бир нече Spring проксинин артында жашырылган базалык максаттуу объектке шилтеме алуу үчүн колдонсоңуз болот. Мисалы, сиз бинди динамикалык mock объект катары конфигурациялаган болсоңуз, ошондой эле EasyMock же Mockito сыяктуу китепкана менен иштеп, жана бул mock объект Spring прокси аркылуу оролгон болсо, сиз базалык mock объектиге түз жетүү керек болушу мүмкүн, күткөн окуяларды анын үчүн конфигурациялоо жана текшерүү жүргүзүү үчүн. Springдеги негизги АОП утилиталары тууралуу маалымат алуу үчүн, AopUtils жана AopProxyUtils бөлүмдөрүн караңыз.

Spring MVC тестинг утилиталары

org.springframework.test.web пакети ModelAndViewAssert камтып, сиз аны JUnit, TestNG же башка тестинг фреймворктору менен бирге Spring MVC дан ModelAndView объекттери менен иштеген модулдук тесттер менен колдонсоңуз болот.

Spring MVC дан Controller класстарын POJO катары модулдук тестирлөө үчүн ModelAndViewAssertты MockHttpServletRequest, MockHttpSession ж.б.уксуз объекттеринин арасында Servlet API mock объекттери менен колдонуңуз. Spring MVC дан Controller жана REST класстарын WebApplicationContext конфигурациясы менен бирге интеграциялык тестирлөө үчүн Spring MVC Test Framework колдонуңуз.
Комментарийлер
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION