Тестването на интерфейсите на MyBatis MyBatis MyBatis е решаваща стъпка за осигуряване на надеждността и функционалността на вашето приложение. Като доставчик на пролетен тестер разбирам значението на задълбоченото тестване и предизвикателствата, с които се сблъскват разработчиците, когато става въпрос за тестване на интерфейсите на MyBatis Mapper. В тази публикация в блога ще споделя някои най -добри практики и техники за това как ефективно да тествам интерфейсите на MyBatis MyBatis MyBatis с помощта на Spring Tester.
Разбиране на интерфейсите на MyBatis Mapper
MyBatis е популярна рамка за постоянство, която опростява достъпа на базата данни в Java приложения. Интерфейсите на MyBatis Mapper са Java интерфейси, които определят SQL методите за операции на базата данни. Тези интерфейси се използват за взаимодействие с базата данни, без да е необходимо да се пише код на котлона за JDBC операции.
Когато тестваме интерфейсите на MyBatis Mapper, трябва да гарантираме, че SQL заявките, дефинирани в тези интерфейси, са правилни и те връщат очакваните резултати. Spring Tester предоставя удобен начин за тестване на тези интерфейси в контекст на приложението за пролетни обувки.
Настройване на тестовата среда
Преди да започнем да тестваме, трябва да настроим средата за тестване. Първо, уверете се, че имате следните зависимости във вашияpom.xml
Ако използвате Maven:
<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-test</artifactId> <scope>test</scope> </dependency> <dependency> <groupId>org.mybatis.spring.boot</groupId> <artifactId>mybatis-spring-boot-starter-test</artifactId> <Scope> Тест </subpe> </senedency>
Тези зависимости осигуряват необходимите помощни програми за пролетно зареждане и MyBatis.
Писане на прост тест за интерфейс MyBatis Mapper
Да предположим, че имаме прост интерфейс MyBatis Mapper, нареченUserMapper
който има метод за намиране на потребител по id:
импортиране org.apache.ibatis.annotations.mapper; импортиране org.apache.ibatis.annotations.select; @Mapper Public Interface UserMapper {@Select ("SELECT * от потребителите, където id = #{id}") Потребител FindUserByID (int id); }
За да тестваме този интерфейс на Mapper, можем да напишем тестов клас, използвайки Spring Tester. Ето пример:
импортиране org.junit.jupiter.api.test; import org.springframework.beans.factory.annotation.autowired; import org.springframework.boot.test.context.springboottest; Импортиране на статичен org.junit.jupiter.api.assertions.assertnotnull; @SpringBootTest публичен клас USERMAPTERTEST {@Autowired Private UserMapper UserMapper; @Test public void testFinduserByid () {потребител потребител = usermapper.finduserById (1); assertNotNull (потребител); }}
В този тестов клас използваме@Springboottest
Анотация за зареждане на контекста на приложението за пролетно зареждане. След това ние AutowireUserMapper
интерфейс и напишете метод за изпитване, за да се обадите наFindurby
метод. Използваме Junit 5'sassertnotnull
Твърдението, за да се гарантира, че върнатият потребител не е нулев.
Тестване с тестова база данни
В реален световен сценарий не искаме да използваме производствената база данни за тестване. Можем да използваме база данни за памет като H2 за тестване. Добавете следната зависимост към вашияpom.xml
:
<Sependency> <ProupID> com.h2database </groupId> <ArtifactID> H2 </artifactID> <coppe> Тест </sist> </serefyency>>
След това конфигурирайте тестовата база данни във вашияApplication-test.properties
Файл:
spring.datasource.url = jdbc: h2: mem: testdb spring.datasource.driverclassname = org.h2.driver spring.datasource.username = sa spring.datasource.password = парола spring.jpa.database-platform = org.hibernate.dialect.h2dialect
Сега, когато стартирате тестовете, Spring Boot ще използва базата данни за памет H2 вместо производствената база данни.
Тестване на сложни заявки и транзакции
Понякога интерфейсите на MyBatis Mapper могат да имат сложни заявки или транзакции. Например, интерфейсът на Mapper може да има метод за вмъкване на потребител и след това да актуализира друг свързан запис в същата транзакция.
Да предположим, че имамеUserMapper
с метод за поставяне на потребител:
импортиране org.apache.ibatis.annotations.insert; импортиране org.apache.ibatis.annotations.options; @Mapper Public Interface USERMAPPER {@insert ("Вмъкване в потребители (име, имейл) стойности ( #{име}, #{имейл})") @Options (useGeneratedKeys = true, keyproperty = "id") int insertUSer (потребител потребител); }
За да тестваме този метод, можем да напишем тест, както следва:
импортиране org.junit.jupiter.api.test; import org.springframework.beans.factory.annotation.autowired; import org.springframework.boot.test.context.springboottest; импортиране org.springframework.transaction.annotation.transactional; Импортиране на статичен org.junit.jupiter.api.assertions.asserttrue; @SpringBootTest @Transactional Public Class UserMapperinsertTest {@Autowired Private UserMapper UserMapper; @Test public void testInsertUser () {потребител на потребителя = нов потребител (); user.setName ("John doe"); user.setemail ("johndoe@example.com"); int result = userMapper.insertUser (потребител); assertTrue (резултат> 0); }}
The@Transactional
Анотацията гарантира, че тестът работи в рамките на транзакция, а промените, направени по време на теста, се връщат обратно след приключване на теста.
Използване на подигравки за външни зависимости
В някои случаи интерфейсът MyBatis Mapper може да зависи от външните услуги или компоненти. Например, методът на Mapper може да извика външен API, за да валидира някои данни, преди да извърши операция на база данни. В такива случаи можем да използваме подигравателно, за да изолираме интерфейса на Mapper от тези външни зависимости.
Можем да използваме Mockito, която е популярна подигравателна рамка в екосистемата Java. Добавете следната зависимост към вашияpom.xml
:
<Sependency> <ProupID> org.Mockito </GroupID> <ArtifactID> Mockito-Core </artifactid> <sust> Тест </subpe> </serefyency>
Ето пример за това как да използвате Mockito, за да се подигравате с външна услуга в тест на Mapper:
импортиране org.junit.jupiter.api.test; внос org.mockito.mockito; import org.springframework.beans.factory.annotation.autowired; import org.springframework.boot.test.context.springboottest; импортиране org.springframework.boot.test.mock.mockito.mockbean; Импортиране на статичен org.junit.jupiter.api.assertions.assertequals; @SpringBootTest публичен клас USERMAPPERWITHMOCKTEST {@AUTOWIRED частен UserMapper USERMAPPER; @MockBean Private ExternalService ExternalService; @Test public void testmapperwithmock () {mockito.when (enterenalservice.validatedata (mockito.any ()))). Thenreturn (true); User user = usermapper.finduserbyid (1); assertEquals ("очаквано име", user.getName ()); }}
Свързани продукти
Като доставчик на пролетен тестер, ние също предлагаме редица лабораторно оборудване с високо качество. Може да се интересувате от нашитеВертикална вакуумна помпа за циркулация на вода,Машина за лабораторни колоидии20 -литров стъклен реактор. Тези продукти са проектирани да отговарят на нуждите на различни научни изследвания и индустриални приложения.
Заключение
Тестването на интерфейсите на MyBatis MyBatis MyBatis е от съществено значение за осигуряване на качеството и надеждността на вашето приложение. Използвайки Spring Tester, можем лесно да напишем тестове за тези интерфейси в контекст на приложението Spring Boot. Можем да използваме в - бази данни за паметта за тестване, да обработваме транзакции и да използваме подигравателни за изолиране на външни зависимости.
Ако се интересувате от нашите продукти за пролетния тестер или някое от свързаното с него лабораторно оборудване, моля, свържете се с нас за по -нататъшни поръчки и договаряне. Ние се ангажираме да ви предоставим най -добрите решения за вашите нужди за тестване и изследвания.
ЛИТЕРАТУРА
- Пролетна документация за зареждане
- Документация на MyBatis
- Junit 5 Документация
- Mockito документация