Vra

Ek het probeer om eenheidstoetsing te implementeer en het tans 'n kode wat die volgende doen:

  1. Vrae eksterne databasis, laai in 'n voertabel
  2. navraag 'n uitsig, wat is 'n delta van my voer en data tabelle, opdatering van data tabel te pas voer tabel

my eenheidstoetsstrategie is hierdie:

Ek het 'n toetsdatabasis wat ek vry is om te manipuleer.

  1. in setUP(), laai sommige data in my toets-db
  2. hardloop my kode deur my toets-db as die bron te gebruik
  3. inspekteer die datatabel, kyk vir tellings en die bestaan/nie-bestaan ​​van sekere rekords
  4. duidelike toets db, laai in 'n ander stel data
  5. voer kode weer uit
  6. inspekteer datatabel weer

Natuurlik het ek die datastelle wat ek in die bron-db laai so opgestel dat ek weet sekere rekords moet bygevoeg, uitgevee, opgedateer word, ens.

Dit lyk asof dit 'n bietjie omslagtig is en daar moet 'n makliker manier wees?Enige voorstelle?

Was dit nuttig?

Oplossing

Is dit jou bedoeling om die aansig wat die deltas genereer te toets, of om te toets dat jou kode korrek byvoeg, uitvee en bywerk in reaksie op die aansig?

As jy die aansig wil toets, kan jy 'n instrument gebruik soos DBUnit om jou voer- en datatabelle te vul met verskeie data waarvan jy die delta met die hand bereken het.Dan sal jy vir elke toets verifieer dat die aansig 'n ooreenstemmende stel gee.

As jy wil toets hoe jou kode reageer op verskille wat deur die aansig opgespoor word, sal ek probeer om databasistoegang weg te onttrek.Ek stel my 'n java-metode voor waarheen jy 'n resultaatstel (of lys van POJO/DTO's) kan deurgee en 'n lys van parameter Object skikkings (weereens, of POJO's) terugstuur wat bygevoeg moet word.Ander metodes sal die verskillys ontleed vir items wat verwyder en opgedateer moet word.Jy kan dan 'n skyn-resultaatstel of pojo's skep, dit na jou kode deurgee en verifieer dat die korrekte parameters teruggestuur word.Alles sonder om 'n databasis te raak.

Ek dink die sleutel is om jou proses in dele op te breek en elkeen so onafhanklik as moontlik te toets.

Ander wenke

DbEenheid sal aan jou behoeftes voldoen.Een ding om voor op te let, is dat hulle oorgeskakel het na die gebruik van SLF4J as hul houtfasade in plaas van JCL.Jy kan SLF4J konfigureer om die aantekening na JCL aan te stuur, maar wees gewaarsku as jy Maven DbUnit gebruik, suig by verstek hul Nop log verskaffer in, so jy sal 'n uitsluiting moet gebruik, ek geblog oor hierdie konflik onlangs.

Ek gebruik DbUnit, maar ek werk ook baie hard om nie teen die DB te hoef te toets nie.Toetse wat teen die databasis gaan, moet slegs bestaan ​​vir die doel om die databasiskoppelvlak te toets.So ek het Mock Db Connections wat ek die data kan stel vir gebruik in al die res van my toetse.

Afgesien van die reeds voorgestelde DBUnit, wil u dalk na kyk Eenhede.Dit gebruik DBUnit, maar bied meer as dit (aanhaling van die webwerf):

  • Outomatiese instandhouding van databasisse, met ondersteuning vir inkrementele, herhaalbare en na-verwerking skrifte
  • Deaktiveer beperkings outomaties en stel reekse op 'n minimum waarde
  • Ondersteuning vir Oracle, Hsqldb, MySql, DB2, Postgresql, MsSql en Derby
  • Vereenvoudig die opstelling van toetsdatabasisverbinding
  • Eenvoudige invoeging van toetsdata met DBUnit * Doen toetse in 'n transaksie
  • JPA entiteit bestuurder skepping en inspuiting vir hibernate, topplink en * Hiberneer SessieFaktoriese skepping en sessie
  • Toets outomaties die kartering van JPA entiteite / hiberneer gekarteer voorwerpe met die databasis

As jy Maven gebruik, is een opsie om die sql-maven-inprop.Dit laat jou toe om databasis-inisialisasie-/bevolkingsskrifte tydens die maven-bou-siklus uit te voer.

Gelisensieer onder: CC-BY-SA met toeskrywing
Nie verbonde aan StackOverflow
scroll top