Önálló tesztelés memóriában lévő adatbázis használatával

1. Áttekintés

Ebben az oktatóanyagban fogunk hozzon létre egy egyszerű Spring alkalmazást, amely a memóriában lévő adatbázisra támaszkodik a teszteléshez.

A normál profilhoz az alkalmazás önálló MySQL adatbázis-konfigurációval rendelkezik, amelyhez a MySQL szerver telepítése és futtatása szükséges, megfelelő felhasználó és adatbázis beállításával.

Az alkalmazás tesztelésének megkönnyítése érdekében elhagyjuk a MySQL által megkövetelt további konfigurációt, és ehelyett egy H2 memóriában lévő adatbázis a JUnit tesztek futtatásához.

2. Maven-függőségek

A fejlődéshez a következő függőségekre van szükségünk:

 org.springframework tavaszi teszt 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.17.Final 

A spring-test, spring-data-jpa, h2 és a hibernate-core legújabb verziói letölthetők a Maven Central oldalról.

3. Adatmodell és adattár

Hozzunk létre egy egyszerű Diák osztály, amelyet entitásként jelölünk meg:

@Entity public class Student {@Id private long id; privát karakterlánc neve; // szabványos kivitelező, mérőeszközök, beállítók}

Ezután hozzunk létre egy adattár interfészt a Spring Data JPA alapján:

nyilvános felület A StudentRepository kiterjeszti a JpaRepository {}

Ez lehetővé teszi Spring számára a manipuláció támogatásának megteremtését Diák tárgyakat.

4. Külön vagyonforrások

Különböző adatbázis-konfigurációk használatának lehetővé tétele a szokásos módban és a tesztelési módban leolvashatjuk az adatbázis tulajdonságait egy fájlból, amelynek helye az alkalmazás futási módjától függően eltérő.

Normál módban a tulajdonságfájl itt lesz src / main / resources, és a tesztelési módszerhez egy tulajdonságfájlt fogunk használni a src / test / resources mappába.

Teszt futtatásakor az alkalmazás először fájlokat keres a src / test / resources mappába. Ha a fájl nem található ezen a helyen, akkor a fájlban definiált fájlt használja src / main / resources mappába. Ha a fájl van, akkor az teszt utat, akkor felülírja a fő- pálya.

4.1. A tulajdonságfájlok meghatározása

Hozzunk létre egy kitartás- tanuló.tulajdonságok fájl a src / main / resources mappa, amely meghatározza a MySQL adatforrás tulajdonságait:

dbc.driverClassName = com.mysql.jdbc.Driver jdbc.url = jdbc: mysql: // localhost: 3306 / myDb jdbc.user = tutorialuser jdbc.passer = tutorialpass hibernate.dialect = org.hibernate.dialect.MySQL5Dialect hibernate .auto = create-drop

A fenti konfiguráció esetén szükségünk lesz a myDb létrehozott adatbázis és a tutorialuser / tutorialpass felhasználó beállítása.

Mivel teszteléshez memóriában lévő adatbázist akarunk használni, létrehozunk egy hasonló fájlt, azonos névvel a src / test / resources mappát, amely ugyanazokkal a kulcsokkal és tulajdonságokkal rendelkezik H2 adatbázis-specifikus értékek:

jdbc.driverClassName = org.h2.Driver jdbc.url = jdbc: h2: mem: myDb; DB_CLOSE_DELAY = -1 hibernate.dialect = org.hibernate.dialect.H2Dialect hibernate.hbm2ddl.auto = create

Beállítottuk a H2 adatbázis memóriában élni és automatikusan létrehozni, majd bezárni és elvetni, amikor a JVM kilép.

4.2. JPA konfiguráció

Hozzunk létre egy @ Konfiguráció osztály, amely az úgynevezett fájlt keresi kitartás- tanuló.tulajdonságok mint tulajdonságforrás és létrehoz egy Adatforrás a benne meghatározott adatbázis tulajdonságok felhasználásával:

@Configuration @EnableJpaRepositories (basePackages = "com.baeldung.persistence.dao") @PropertySource ("persistence-student.properties") @EnableTransactionManagement public class StudentJpaConfig {@Autowired private Environment env; @Bean public DataSource dataSource () {DriverManagerDataSource dataSource = új 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")); return dataSource; } // configure entityManagerFactory // configureactionManager // további hibernált tulajdonságok beállítása}

5. JUnit teszt létrehozása

Írjunk egy egyszerű JUnit tesztet a fent leírt konfiguráció alapján, amely a StudentRepository a mentéshez és letöltéshez a Diák entitás:

@RunWith (SpringJUnit4ClassRunner.class) @ContextConfiguration (class = {StudentJpaConfig.class}, loader = AnnotationConfigContextLoader.class) @Transactional public class InMemoryDBTest {@Resource private StudentRepository studentRepository; @Test public void givenStudent_whenSave_thenGetOk () {Student student = new Student (1, "john"); studentRepository.save (hallgató); Student student2 = studentRepository.findOne (1); assertEquals ("john", hallgató2.getName ()); }}

Tesztünk teljesen önállóan fog futni - memóriát hoz létre H2 adatbázis, futtasson utasításokat, majd zárja be a kapcsolatot és dobja el az adatbázist, amint azt a naplóban láthatjuk:

INFO: HHH000400: A dialektus használata: org.hibernate.dialect.H2Dialect Hibernate: drop table Student, ha létezik Hibernate: create table Student (id bigint not null, name varchar (255), primary key (id)) 2017. március 24. 41:51 PM org.hibernate.tool.schema.internal.SchemaCreatorImpl applyImportSources INFO: HHH000476: Import script végrehajtása 'org.hiber [e-mail védett] 1b8f9e2' Hibernálás: válasszuk a student0_.id azonosítót: ahol student0_.id =? Hibernálás: dobja a táblázatot Hallgató, ha létezik

6. Következtetés

Ebben a gyors példában bemutattuk, hogyan futtathatunk önálló tesztet a memóriában lévő adatbázis használatával.

Mint mindig, a teljes forráskód megtalálható a GitHubon.