Tavaszi JdbcTemplate Unit Testing

1. Áttekintés

Tavaszi JdbcTemplate egy hatékony eszköz a fejlesztők számára, hogy összpontosítsanak az SQL lekérdezések írására és az eredmények kinyerésére. Csatlakozik a háttér-adatbázishoz, és közvetlenül végrehajtja az SQL-lekérdezéseket.

Ezért integrációs tesztek segítségével megbizonyosodhatunk arról, hogy megfelelően tudjuk-e kinyerni az adatokat az adatbázisból. Írhatunk egységteszteket is a kapcsolódó funkciók helyességének ellenőrzésére.

Ebben az oktatóanyagban megmutatjuk, hogyan kell egységesen tesztelni JdbcTemplate kód.

2. JdbcTemplate és Futó lekérdezések

Először is kezdjük egy olyan adatelérési objektum (DAO) osztályral, amely használja JdbcTemplate:

public class AlkalmazottDAO {private JdbcTemplate jdbcTemplate; public void setDataSource (DataSource dataSource) {jdbcTemplate = new JdbcTemplate (dataSource); } public int getCountOfEmployees () {return jdbcTemplate.queryForObject ("SELECT COUNT (*) FROM EMPLOYEE", Integer.class); }}

Függőség-injektálunk a Adatforrás objektum a AlkalmazottDAO osztály. Ezután létrehozzuk a JdbcTemplate objektum a szetter módszerben. Továbbá használjuk JdbcTemplate egy példamódszerben getCountOfEmployees ().

Kétféle módon lehet egységesen használni a tesztelési módszereket JdbcTemplate.

Adatforrásként használhatunk memóriában lévő adatbázist, például a H2 adatbázist. A valós alkalmazásokban azonban az SQL lekérdezésnek bonyolult kapcsolatai lehetnek, és összetett telepítési parancsfájlokat kell létrehoznunk az SQL utasítások teszteléséhez.

Alternatív megoldásként gúnyolhatjuk is a JdbcTemplate objektum a módszer funkcionalitásának tesztelésére.

3.Egység teszt H2 adatbázissal

Hozhatunk létre egy adatforrást, amely csatlakozik a H2 adatbázishoz, és befecskendezheti azt a AlkalmazottDAO osztály:

@Test public void whenInjectInMemoryDataSource_thenReturnCorrectEmployeeCount () {DataSource dataSource = new EmbeddedDatabaseBuilder (). SetType (EmbeddedDatabaseType.H2) .addScript ("classpath: jdbc / schema.sql (teszt)" class: .épít(); EmployeeDAO alkalmazottDAO = new EmployeeDAO (); workerDAO.setDataSource (dataSource); assertEquals (4, alkalmazottDAO.getCountOfEmployees ()); }

Ebben a tesztben először a H2 adatbázisban szerkesztünk egy adatforrást. Az építkezés során kivégezzük schema.sql hogy létrehozza a MUNKAVÁLLALÓ asztal:

TÁBLÁZATI MUNKAVÁLLALÓ LÉTREHOZÁSA (ID nem NULL PRIMARY KEY, FIRST_NAME varchar (255), LAST_NAME varchar (255), ADDRESS varchar (255));

Mi is futunk teszt-adatok.sql tesztadatok hozzáadása a táblázathoz:

BEÁLLÍTÁS MUNKAVÁLLALÓI ÉRTÉKEKBE (1, 'James', 'Gosling', 'Kanada'); BEÁLLÍTÁS MUNKAVÁLLALÓI ÉRTÉKEKBE (2, „Donald”, „Knuth”, „USA”); BEÁLLÍTÁS MUNKAVÁLLALÓI ÉRTÉKEKBE (3, 'Linus', 'Torvalds', 'Finnország'); BEÁLLÍTÁS MUNKAVÁLLALÓI ÉRTÉKEKBE (4, „Dennis”, „Ritchie”, „USA”);

Ezután beadhatjuk ezt az adatforrást a AlkalmazottDAO osztály és tesztelje a getCountOfEmployees módszer a memóriában lévő H2 adatbázis felett.

4.Egységvizsgálat ál-objektummal

Gúnyolhatjuk a JdbcTemplate objektumot, így nem kell futtatnunk az SQL utasítást egy adatbázisban:

public class EmployeeDAOUnitTest {@Mock JdbcTemplate jdbcTemplate; @Test public void whenMockJdbcTemplate_thenReturnCorrectEmployeeCount () {EmployeeDAO workerDAO = new EmployeeDAO (); ReflectionTestUtils.setField (alkalmazottDAO, "jdbcTemplate", jdbcTemplate); Mockito.when (jdbcTemplate.queryForObject ("SELECT COUNT (*) FROM EMPLOYEE", Integer.class)) .thenReturn (4); assertEquals (4, alkalmazottDAO.getCountOfEmployees ()); }}

Ebben az egységtesztben először gúnyt hirdetünk JdbcTemplate objektum a @Mock annotáció. Aztán beadjuk a AlkalmazottDAO objektum felhasználásával ReflectionTestUtils. Továbbá használjuk a Mockito segédprogram a JdbcTemplate lekérdezés. Ez lehetővé teszi számunkra, hogy teszteljük a getCountOfEmployees módszer anélkül, hogy csatlakozna egy adatbázishoz.

Pontos egyezést használunk az SQL utasítás karaktersorozatán, amikor gúnyolódunk a JdbcTemplate lekérdezés. A valós alkalmazásokban összetett SQL karakterláncokat hozhatunk létre, és pontos egyezést nehéz elvégezni. Ezért használhatjuk a anyString () módszer a karakterlánc-ellenőrzés megkerülésére:

Mockito.when (jdbcTemplate.queryForObject (Mockito.anyString (), Mockito.eq (Integer.class))) .thenReturn (3); assertEquals (3, alkalmazottDAO.getCountOfEmployees ());

5. Tavaszi csomagtartó @JdbcTest

Végül, ha a Spring Boot programot használjuk, van egy megjegyzés, amellyel tesztet indíthatunk egy H2 adatbázissal és egy JdbcTemplate bab: @JdbcTest.

Hozzunk létre egy tesztosztályt ezzel a megjegyzéssel:

@JdbcTest @Sql ({"schema.sql", "test-data.sql"}) osztály EmployeeDAOIntegrationTest {@Autowired private JdbcTemplate jdbcTemplate; @Test void whenInjectInMemoryDataSource_thenReturnCorrectEmployeeCount () {EmployeeDAO workerDAO = new EmployeeDAO (); alkalmazottDAO.setJdbcTemplate (jdbcTemplate); assertEquals (4, alkalmazottDAO.getCountOfEmployees ()); }}

Megjegyezhetjük a @Sql megjegyzés, amely lehetővé teszi számunkra, hogy meghatározzuk a teszt előtt futtatni kívánt SQL fájlokat.

6. Következtetés

Ebben az oktatóanyagban az egység tesztelésének több módját mutattuk meg JdbcTemplate.

Mint mindig, a cikk forráskódja elérhető a GitHubon.