Samostatné testovanie pomocou databázy v pamäti
1. Prehľad
V tejto príručke sa chystáme vytvorte jednoduchú jarnú aplikáciu, ktorá sa pri testovaní spolieha na databázu v pamäti.
Pre štandardný profil bude mať aplikácia samostatnú konfiguráciu databázy MySQL, ktorá vyžaduje inštaláciu a spustenie servera MySQL so správnym nastavením používateľa a databázy.
Aby sme uľahčili testovanie aplikácie, vzdáme sa ďalšej konfigurácie vyžadovanej MySQL a namiesto nej použijeme H2 pamäť pre spustenie testov JUnit.
2. Maven závislosti
Na vývoj potrebujeme nasledujúce závislosti:
org.springframework spring-test 5.1.5.RELEASE org.springframework.data spring-data-jpa 2.1.5.RELEASE com.h2database h2 1.4.194 org.hibernate hibernate-core 5.2.17Final
Najnovšie verzie testov na jar, spring-data-jpa, h2 a hibernate-core si môžete stiahnuť z Maven Central.
3. Dátový model a úložisko
Vytvorme jednoduchý Študent trieda, ktorá bude označená ako entita:
@Entity verejná trieda študent {@Id súkromné dlhé ID; súkromné meno reťazca; // štandardný konštruktor, getre, setre}
Ďalej vytvoríme rozhranie úložiska založené na Spring Data JPA:
verejné rozhranie StudentRepository rozširuje JpaRepository {}
Toto umožní spoločnosti Spring vytvoriť podporu pre manipuláciu Študent predmety.
4. Samostatné zdroje majetku
Aby sme umožnili použitie rôznych konfigurácií databázy pre štandardný režim a testovací režim, môžeme načítať vlastnosti databázy zo súboru, ktorého umiestnenie je odlišné v závislosti od bežiaceho režimu aplikácie.
V normálnom režime bude súbor s vlastnosťami umiestnený v src / main / resourcesa pre testovaciu metódu použijeme súbor vlastností v src / test / zdroje priečinok.
Pri spustení testu aplikácia najskôr vyhľadá súbory v priečinku src / test / zdroje priečinok. Ak sa súbor v tomto umiestnení nenájde, použije sa súbor definovaný v src / main / resources priečinok. Ak je súbor k dispozícii, je test cesta, potom prepíše tú z hlavný cesta.
4.1. Definovanie súborov vlastností
Vytvorme a vytrvalosť- študent.vlastnosti súbor v src / main / resources priečinok, ktorý definuje vlastnosti pre zdroj údajov MySQL:
dbc.driverClassName = com.mysql.jdbc.Driver jdbc.url = jdbc: mysql: // localhost: 3306 / myDb jdbc.user = tutorialuser jdbc.pass = tutorialpass hibernate.dialect = org.hibernate.dialect.MySQL5Dialect hibernate.hbm2db .auto = vytvoriť-pustiť
V prípade vyššie uvedenej konfigurácie budeme musieť mať myDb vytvorená databáza a používateľ tutorialuser / tutorialpass nastavenie používateľa.
Pretože chceme na testovanie použiť pamäťovú databázu, vytvoríme podobný súbor s rovnakým názvom v src / test / zdroje priečinok obsahujúci vlastnosti s rovnakými kľúčmi a H2 hodnoty špecifické pre databázu:
jdbc.driverClassName = org.h2.Driver jdbc.url = jdbc: h2: mem: myDb; DB_CLOSE_DELAY = -1 hibernate.dialect = org.hibernate.dialect.H2Dialect hibernate.hbm2ddl.auto = vytvoriť
Nakonfigurovali sme H2 databázy, aby žila v pamäti a bola vytvorená automaticky, potom sa po ukončení JVM zatvorí a zruší.
4.2. Konfigurácia JPA
Vytvorme a @ Konfigurácia trieda, ktorá vyhľadáva súbor s názvom vytrvalosť- študent.vlastnosti ako zdroj majetku a vytvára a Dátový zdroj pomocou v nej definovaných vlastností databázy:
@Configuration @EnableJpaRepositories (basePackages = "com.baeldung.persistence.dao") @PropertySource ("persistence-student.properties") @EnableTransactionManagement verejná trieda StudentJpaConfig {@Autowired private Environment env; @Bean public DataSource dataSource () {DriverManagerDataSource dataSource = nový DriverManagerDataSource (); dataSource.setDriverClassName (env.getProperty ("jdbc.driverClassName")); dataSource.setUrl (env.getProperty ("jdbc.url")); dataSource.setUsername (env.getProperty ("jdbc.user")); dataSource.setPassword (env.getProperty ("jdbc.pass")); vrátiť dátový zdroj; } // konfigurácia entityManagerFactory // konfiguráciaactionManager // konfigurácia ďalších vlastností režimu dlhodobého spánku}
5. Vytvorenie testu JUnit
Poďme napísať jednoduchý test JUnit založený na vyššie popísanej konfigurácii, ktorá používa StudentRepository uložiť a načítať a Študent subjekt:
@RunWith (SpringJUnit4ClassRunner.class) @ContextConfiguration (classes = {StudentJpaConfig.class}, loader = AnnotationConfigContextLoader.class) @Transactional public class InMemoryDBTest {@Resource private StudentRepository studentRepository; @Test public void givenStudent_whenSave_thenGetOk () {Študent študent = nový Študent (1, "john"); studentRepository.save (študent); Študent student2 = studentRepository.findOne (1); assertEquals ("john", student2.getName ()); }}
Náš test bude prebiehať úplne samostatne - vytvorí sa v pamäti H2 vykonajte príkazy, potom ukončite pripojenie a zrušte databázu, ako vidíme v protokole:
INFO: HHH000400: Používanie dialektu: org.hibernate.dialect.H2Dialect Hibernate: zrušiť tabuľku Student, ak existuje Hibernate: vytvoriť tabuľku Student (id bigint nie je null, meno varchar (255), primárny kľúč (id)) 24. marca 2017 12: 41:51 org.hibernate.tool.schema.internal.SchemaCreatorImpl applyImportSources INFO: HHH000476: Spustenie importovacieho skriptu 'org.hiber [chránené e-mailom] 1b8f9e2' Hibernácia: vyberte študent0_.id ako id1_0_0_, student0_.name ako meno Student2_0_0_ kde student0_.id =? Hibernácia: rozbaľovací stôl Študent, ak existuje
6. Záver
V tomto rýchlom príklade sme si ukázali, ako môžeme spustiť samostatný test pomocou databázy v pamäti.
Celý zdrojový kód nájdete ako vždy na GitHub.