Provjera jedinice JdbcTemplate

1. Pregled

Proljeće JdbcTemplate moćan je alat za programere da se usredotoče na pisanje SQL upita i izdvajanje rezultata. Povezuje se s pozadinskom bazom podataka i izravno izvršava SQL upite.

Stoga možemo koristiti integracijske testove kako bismo bili sigurni da možemo pravilno povući podatke iz baze podataka. Također, možemo napisati jedinstvene testove kako bismo provjerili ispravnost povezanih funkcionalnosti.

U ovom uputstvu ćemo pokazati kako se testira jedinica JdbcTemplate kodirati.

2. JdbcTemplate i pokretanje upita

Prvo, krenimo od klase objekta pristupa podacima (DAO) koja koristi JdbcTemplate:

javna klasa EmployeeDAO {private JdbcTemplate jdbcTemplate; javna praznina setDataSource (DataSource dataSource) {jdbcTemplate = novi JdbcTemplate (dataSource); } public int getCountOfEfficiees () {return jdbcTemplate.queryForObject ("SELECT COUNT (*) FROM EMPLOYEE", Integer.class); }}

Mi ovisnost-ubrizgavamo a Izvor podataka objekt u ZaposlenikDAO razred. Zatim kreiramo JdbcTemplate objekt u metodi postavljača. Također, koristimo JdbcTemplate u primjeru metode getCountOfEfficiees ().

Postoje dva načina za jedinstvene metode ispitivanja koje se koriste JdbcTemplate.

Kao izvor podataka za testiranje možemo koristiti bazu podataka u memoriji, poput baze podataka H2. Međutim, u stvarnim aplikacijama SQL upit može imati složene odnose, a mi moramo stvoriti složene skripte za postavljanje kako bismo testirali SQL izjave.

Alternativno, možemo se i rugati JdbcTemplate objekt za testiranje funkcionalnosti metode.

3.Jedinstveni test s H2 bazom podataka

Možemo stvoriti izvor podataka koji se povezuje s H2 bazom podataka i ubrizgati u ZaposlenikDAO razred:

@Test public void whenInjectInMemoryDataSource_thenReturnCorrectEfficieeCount () {DataSource dataSource = new EmbeddedDatabaseBuilder (). SetType (EmbeddedDatabaseType.H2) .addScript ("classpath: jdbc / schema.sd. Jdbc / schema.sqd. .izgraditi(); EmployeeDAO zaposlenikDAO = novi zaposlenikDAO (); workerDAO.setDataSource (dataSource); assertEquals (4, workerDAO.getCountOfEfficiees ()); }

U ovom testu prvo konstruiramo izvor podataka na bazi podataka H2. Tijekom gradnje izvršavamo shema.sql stvoriti ZAPOSLENIK stol:

STVARI ZAPOSLENIKA U TABLI (ID int NIJE NULL PRIMARNI KLJUČ, FIRST_NAME varchar (255), LAST_NAME varchar (255), ADRESA varchar (255));

Također, trčimo test-data.sql za dodavanje test podataka u tablicu:

UMESTI U VRIJEDNOSTI ZAPOSLENIH (1, 'James', 'Gosling', 'Canada'); UMESTITE U VRIJEDNOSTI ZAPOSLENIH (2, 'Donald', 'Knuth', 'USA'); UMESTI U VRIJEDNOSTI ZAPOSLENIH (3, 'Linus', 'Torvalds', 'Finska'); UMESTI U VRIJEDNOSTI ZAPOSLENIH (4, 'Dennis', 'Ritchie', 'USA');

Zatim možemo ubrizgati ovaj izvor podataka u ZaposlenikDAO razred i testirati getCountOfEfficiees metodu u H2 bazi podataka u memoriji.

4.Jedinstveni test s lažnim predmetom

Možemo se rugati JdbcTemplate objekt tako da ne trebamo pokretati SQL izraz na bazi podataka:

javna klasa EmployeeDAOUnitTest {@Mock JdbcTemplate jdbcTemplate; @Test public void whenMockJdbcTemplate_thenReturnCorrectEfficieeCount () {EmployeeDAO workerDAO = new EmployeeDAO (); ReflectionTestUtils.setField (zaposlenikDAO, "jdbcTemplate", jdbcTemplate); Mockito.when (jdbcTemplate.queryForObject ("SELECT COUNT (*) OF EMPLOYEE", Integer.class)). ThenReturn (4); assertEquals (4, workerDAO.getCountOfEfficiees ()); }}

U ovom jediničnom testu prvo proglašavamo lažno JdbcTemplate objekt s @Oponašanje bilješka. Zatim ga ubrizgamo u ZaposlenikDAO objekt pomoću ReflectionTestUtils. Također, koristimo Mockito uslužni program za ismijavanje povratnog rezultata JdbcTemplate upit. To nam omogućuje testiranje funkcionalnosti getCountOfEfficiees metoda bez povezivanja s bazom podataka.

Koristimo točno podudaranje niza SQL izraza kada se rugamo JdbcTemplate upit. U stvarnim aplikacijama možemo stvoriti složene SQL nizove i teško je točno podudarati. Stoga možemo koristiti i anyString () metoda za zaobilaženje provjere niza:

Mockito.when (jdbcTemplate.queryForObject (Mockito.anyString (), Mockito.eq (Integer.class))). ThenReturn (3); assertEquals (3, workerDAO.getCountOfEfficiees ());

5. Spring Boot @JdbcTest

Napokon, ako koristimo Spring Boot, postoji napomena koju možemo koristiti za pokretanje testa s H2 bazom podataka i JdbcTemplate grah: @JdbcTest.

Stvorimo test klasu s ovom napomenom:

@JdbcTest @Sql ({"schema.sql", "test-data.sql"}) klasa EmployeeDAOIntegrationTest {@Autowired private JdbcTemplate jdbcTemplate; @Test void whenInjectInMemoryDataSource_thenReturnCorrectEfficieeCount () {EmployeeDAO workerDAO = new EmployeeDAO (); zaposlenikDAO.setJdbcTemplate (jdbcTemplate); assertEquals (4, workerDAO.getCountOfEfficiees ()); }}

Također možemo primijetiti prisutnost @Sql napomena koja nam omogućuje da odredimo SQL datoteke koje će se pokretati prije testa.

6. Zaključak

U ovom smo uputstvu pokazali više načina za jedinstveno testiranje JdbcTemplate.

Kao i uvijek, izvorni kôd članka dostupan je na GitHubu.


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