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.


$config[zx-auto] not found$config[zx-overlay] not found