(function(w,d,s,l,i){w[l]=w[l]||[];w[l].push({'gtm.start': new Date().getTime(),event:'gtm.js'});var f=d.getElementsByTagName(s)[0], j=d.createElement(s),dl=l!='dataLayer'?'&l='+l:'';j.async=true;j.src= 'https://www.googletagmanager.com/gtm.js?id='+i+dl;f.parentNode.insertBefore(j,f); })(window,document,'script','dataLayer','GTM-5LHNRP9'); Prófunarílát – Hvernig gerum við prófanir auðveldari? - The Codest
The Codest
  • Um okkur
  • Þjónusta
    • Hugbúnaðarþróun
      • Framhliðþróun
      • Bakendaþróun
    • Staff Augmentation
      • Framhliðaráþrófarar
      • Bakhliðaráþróunaraðilar
      • Gagnaverkfræðingar
      • Skýjaverkfræðingar
      • Gæðatryggingartæknimenn
      • Annað
    • Það er ráðgjafi
      • Endurskoðun og ráðgjöf
  • Iðnaðargreinar
    • Fjártæknifyrirtæki og bankastarfsemi
    • E-commerce
    • Adtech
    • Heilbrigðistækni
    • Framleiðsla
    • Flutningar
    • Bifreiða
    • Internet hlutanna
  • Gildi fyrir
    • CEO
    • CTO
    • Afhendingarstjóri
  • Teymið okkar
  • Case Studies
  • Vitið hvernig
    • Blogg
    • Fundir
    • Vefnámskeið
    • Auðlindir
Starfsferilmöguleikar Hafðu samband
  • Um okkur
  • Þjónusta
    • Hugbúnaðarþróun
      • Framhliðþróun
      • Bakendaþróun
    • Staff Augmentation
      • Framhliðaráþrófarar
      • Bakhliðaráþróunaraðilar
      • Gagnaverkfræðingar
      • Skýjaverkfræðingar
      • Gæðatryggingartæknimenn
      • Annað
    • Það er ráðgjafi
      • Endurskoðun og ráðgjöf
  • Gildi fyrir
    • CEO
    • CTO
    • Afhendingarstjóri
  • Teymið okkar
  • Case Studies
  • Vitið hvernig
    • Blogg
    • Fundir
    • Vefnámskeið
    • Auðlindir
Starfsferilmöguleikar Hafðu samband
Aftur ör Farðu aftur
2022-07-26
Hugbúnaðarþróun

Prófunarílát – Hvernig má einfalda prófanir?

Bartlomiej Kuczynski

Ertu að leita að leið til að gera prófanir auðveldari? Við erum hér fyrir þig! Skoðaðu eftirfarandi grein og lærðu hvernig þú getur gert það mögulegt.

Hér er tómt.

Nútíma forritunarþróun byggir á einni einfaldri reglu:

Notaðu samsetningu

Við setjum klasa, fall og þjónustur saman í stærri hugbúnaðareiningar. Þessi síðasti þáttur er undirstaða örþjónustur og sexhyrnd byggingarlist. Við viljum nota núverandi lausnir, samþætta þær við hugbúnaðinn okkar og fara beint á markaður.

Viltu sjá um notendaskráningu og vista notendur? gögn? Þú getur valið einn af OAuth-þjónustunum. Kannski býður forritið þitt upp á áskrift eða greiðslu? Það eru margar þjónustur sem geta hjálpað þér að takast á við þetta. Vantar þig greiningu á vefsíðunni þinni en þú skilur ekki Persónuverndarreglugerð ESB? Endilega taktu eina af tilbúnum lausnum.

Eitthvað sem gerir þróun svo auðvelda úr viðskiptalegu sjónarhorni getur gefið þér höfuðverk – augnablikið þegar þú þarft að skrifa einfalt próf.

Frábæru dýrin: biðraðir, gagnagrunnar og hvernig á að prófa þær

Einingaprófanir eru nokkuð einfaldar. Ef þú fylgir bara reglum, þá verður prófunarumhverfi þitt og kóði eru heilbrigðir. Hvaða reglur eru það?

  • Auðvelt að skrifa – einingapróf ætti að vera auðvelt að skrifa því þú skrifar mörg þeirra. Minni fyrirhöfn þýðir að fleiri próf eru skrifuð.
  • Læsilegt – Prófunarkóðinn ætti að vera auðlesinn. Prófið er saga. Það lýsir hegðun hugbúnaðarins og má nota sem skammleiðingu í skjölun. Góð einingapróf hjálpar þér að laga villur án þess að þurfa að rekja kóðann.
  • Áreiðanlegur – prófið ætti að mistakast aðeins ef villa er í kerfinu sem verið er að prófa. Augljóst? Ekki alltaf. Stundum standast próf ef þú keyrir þau eitt og eitt en mistakast þegar þau eru keyrð sem heild. Þau standast á þinni vél en mistakast á CI (Virkar á tölvunni minni). Góð einingapróf hefur aðeins eina orsök misheppnunar.
  • hratt – Prófanir ættu að vera hraðar. Undirbúningur til að keyra, ræsa og framkvæma prófanir sjálfar ætti að vera mjög snöggur. Annars munt þú skrifa þær en ekki keyra. Hægar prófanir þýða tapaða einbeitingu. Þú bíður og horfir á framvindulínuna.
  • Sjálfstæður – að lokum ætti prófið að vera sjálfstætt. Þessi regla leiðir af hinum fyrri. Einungis sannarlega sjálfstæð próf geta orðið eining. Þau trufla ekki hvert annað, má keyra þau í hvaða röð sem er og hugsanleg mistök ráðast ekki af niðurstöðum annarra prófa. Sjálfstætt þýðir einnig að ekki sé háð neinum utanaðkomandi auðlindum, svo sem gagnagrunnum, skilaboðakerfum eða skráarkerfi. Ef þú þarft að eiga samskipti við utanaðkomandi hluti geturðu notað mock-hluti, stubba eða dummy-hluti.

Allt verður flókið þegar við viljum skrifa einhverjar samþættingaprófanir. Það er ekki slæmt ef við viljum prófa nokkur þjónustu saman. En þegar við þurfum að prófa þjónustu sem nota utanaðkomandi auðlindir eins og gagnagrunna eða skilaboðþjónustu, þá erum við að leita í vandræði.

Til að keyra prófið þarftu að setja upp…

Fyrir mörgum árum, þegar við vildum búa til samþættingartest og nota t.d. gagnagrunna, höfðum við tvo valkosti:

  1. Við getum sett upp gagnagrunn staðbundið. Stillum upp skema og tengjumst því úr prófinu okkar;
  2. Við getum tengst núverandi eintaki „einhvers staðar í geimnum”.

Bæði voru kostir og gallar. En bæði bæta við auknum flækjustigi. Stundum var um tæknilega flækju að ræða sem stafaði af eiginleikum ákveðinna verkfæra, t.d. uppsetningu og stjórnun Oracle gagnagrunns á þínum eigin tölvu (localhost). Stundum var um óþægindi í ferlinu að ræða, t.d. þú þarft að samþykkja prófið. lið um notkun JMS… í hvert skipti sem þú vilt keyra prófanir.

Ílátin til bjargar

Á síðustu tíu árum hefur hugmyndin um ílátavæðingu öðlast viðurkenningu í greininni. Því er eðlileg ákvörðun að velja ílát sem lausn á samþættingartestvandamálinu okkar. Þetta er einföld, hrein lausn. Þú keyrir bara ferlið þitt og allt virkar! Geturðu ekki trúað því? Skoðaðu þessa einföldu uppsetningu á Maven-smíði:

com.dkanejs.maven.plugins
 docker-compose-maven-plugin
 4.0.0
 
 
 up
         test-compile
 
 up
 
 
 ${verkefni.basedir}/docker-compose.yml
 true
 
 
 
 down
 post-integration-test
 
 down
         
 
 ${project.basedir}/docker-compose.yml
 true

Og hinn docker-compose.yml Skráin lítur líka ansi vel út!

version: "3.5"

services:

 postgres:
   container_name: reactivedb
   image: postgres:13.2
   restart: always
   environment:
 - POSTGRES_USER=admin
 - POSTGRES_PASSWORD=password
 - POSTGRES_DB=cities
   ports:
 - "5432:5432"
   volumes:
 - postgres_data:/data/db

 pgadmin:
   container_name: pgadmin4
   image: dpage/pgadmin4
   restart: always
   environment:
 PGADMIN_DEFAULT_EMAIL: [email protected]
     PGADMIN_DEFAULT_PASSWORD: password
   ports:
 - "15050:80"
   volumes:
 - pgadmin_data:/data/pgadmin

volumes:
 postgres_data:
 pgadmin_data:

En geturðu greint vandamálið hér?

Eignarhaldsskip sem lokar fyrir allt

Dæmið hér að ofan er mjög einfalt. Aðeins ein PostgreSQL-gagnagrunnur, pgAdmin og það er allt. Þegar þú keyrir

bash
$ mvn clean verify

Þá ræsir Maven-viðbótin gámana og slökkvir á þeim eftir prófin. Vandamálin hefjast þegar verkefnið vex og compose-skráin okkar vex líka. Í hvert sinn þarftu að ræsa alla gáma og þeir verða virkir allan byggingarferilinn. Þú getur bætt aðeins úr ástandinu með því að breyta stillingum á keyrslu viðbótarinnar, en það dugar ekki. Í versta falli tæma gámarnir kerfisstauðu auðlindir áður en prófin hefjast!

Og þetta er ekki eina vandamálið. Þú getur ekki keyrt eina einustu samþættingaprófun úr IDE-inu þínu. Áður en þú gerir það þarftu að ræsa gámana handvirkt. Enn fremur mun næsta Maven-keyrsla rífa niður þá gáma (sjáðu á niður framkvæmd).

Þannig að þessi lausn er eins og stórt flutningaskip. Ef allt gengur vel, þá er allt í lagi. Öll óvænt eða óvenjuleg hegðun leiðir til okkur til einhvers konar hörmungar.

Prófunarkerfi – keyra kerfi úr prófunum

En hvað ef við gætum keyrt gámana okkar úr prófunum? Þessi hugmynd lítur vel út og er þegar í framkvæmd. Prófunarílát, því við erum að tala um þetta verkefni, hér er lausn á vandamálum okkar. Ekki fullkomið, en enginn er fullkominn.

Þetta er Java bókasafn sem styður JUnit- og Spock-prófanir og býður upp á léttar og auðveldlega leiðir til að keyra þær Docker ílát. Skoðum það og skrifum smá kóða!

Forsendur og stillingar

Áður en við byrjum, þurfum við að athuga stillingarnar okkar. Prófunarílát þörf:

  • Docker í útgáfu v17.09,
  • Java lágmarksútgáfa 1.8,
  • Aðgangur að neti, sérstaklega að docker.hub.

Meira um kröfur fyrir tilteknar stýrikerfi og CI má finna
í Skjalagerð.

Nú er kominn tími til að bæta nokkrum línum við pom.xml.

Ég nota Spring Boot í verkefninu til að draga úr endurteknum kóðainnslætti. Prófunarílát eru sjálfstæðir frá Spring Framework og þú getur notað þá án þess.
org.testcontainers
 testcontainers-bom
 ${testcontaines.version}
 pom
       import
 
   
 
 
   
 org.postgresql
 postgresql
 runtime
   
   
 org.testcontainers
 postgresql
 test
   
   
 org.testcontainers
 junit-jupiter
 test

Ég nota Prófunarílát útgáfa 1.17.3, en endilega notaðu nýjasta.

Prófanir með Postgres-íláti

Fyrsta skrefið er að undirbúa eintak af íláti okkar. Þú getur gert það beint í prófinu, en sjálfstætt flokkur lítur betur út.

public class Postgres13TC extends PostgreSQLContainer {

 private static final Postgres13TC TC = new Postgres13TC();

 private Postgres13TC() {
   super("postgres:13.2");
 }

 public static Postgres13TC getInstance() {
   return TC;
 }

 @Override
 public void start() {
   super.start();
   System.setProperty("DB_URL", TC.getJdbcUrl());
   System.setProperty("DB_USERNAME", TC.getUsername());
   System.setProperty("DB_PASSWORD", TC.getPassword());
 }

 @Override
 public void stop() {
   // gera ekkert. Þetta er deilt eintak. Látið JVM sjá um þessa aðgerð.
 }
}

Í upphafi prófanna munum við búa til eintak af Postgres13TC. Þessi bekkur getur meðhöndlað upplýsingar um ílátið okkar. Mikilvægast hér eru tengistrengir gagnagrunnsins og auðkenni. Nú er kominn tími til að skrifa mjög einfalt próf.

@Testcontainers
class SimpleDbTest {

 @Container
 private static Postgres13TC = Postgres13TC.getInstance();

 @Test
 void testConnection() {
   assumeThat(postgres13TC.isRunning());
   var connectionProps = new Properties();
   connectionProps.put("user", postgres13TC.getUsername());
   connectionProps.put("password", postgres13TC.getPassword());

   try (Connection = DriverManager.getConnection(postgres13TC.getJdbcUrl(),
 connectionProps)) {
 var resultSet = connection.prepareStatement("Select 1").executeQuery();
     resultSet.next();
 assertThat(resultSet.getInt(1)).isEqualTo(1);
   } catch (SQLException sqlException) {
 assertThat((Exception) sqlException).doesNotThrowAnyException();
   }
 }
}

Ég nota JUnit 5 hér. Athugasemd @Testcontainers er hluti af viðbótunum sem stýra ílátum í prófunarumhverfinu. Þær finna öll reitina með @Ílát athugasemd og byrjunar- og stöðvunarkassa í sömu röð.

Prófanir með Spring Boot

Eins og ég nefndi áður nota ég Spring Boot í verkefninu. Í þessu tilfelli þurfum við að skrifa aðeins meira kóða. Fyrsta skrefið er að búa til viðbótar stillingaklass.

@Slf4j
public class ContainerInit implements
   ApplicationContextInitializer {

 public static Postgres13TC;

 static {
   postgres13TC = Postgres13TC.getInstance();
   postgres13TC.start();
 }

 @Override
 public void initialize(ConfigurableApplicationContext applicationContext) {
   TestPropertySourceUtils.addInlinedPropertiesToEnvironment(
 applicationContext,
 "spring.datasource.url=" + postgres13TC.getJdbcUrl(),
       "spring.datasource.username=" + postgres13TC.getUsername(),
 "spring.datasource.password=" + postgres13TC.getPassword(),
 "db.host=" + postgres13TC.getHost(),
 "db.port=" + postgres13TC.getMappedPort(postgres13TC.POSTGRESQL_PORT),
 "db.name=" + postgres13TC.getDatabaseName(),
 "db.username=" + postgres13TC.getUsername(),
 "db.password=" + postgres13TC.getPassword()
   );
 }
}

Þessi bekkur skiptir út núverandi eiginleikum með gildum úr the prófunarílát. Fyrstu þrír eiginleikarnir eru staðlaðir Spring-eiginleikar. Næstu fimm eru viðbótareiginleikar sem hægt er að nota til að stilla aðra auðlinda og viðbætur, til dæmis Liquibase:

spring.liquibase.change-log=classpath:/db/changelog/dbchangelog.xml
spring.liquibase.url=jdbc:postgresql://${db.host:localhost}:${db.port:5432}/${db.name:cities}
spring.liquibase.user=${db.username:admin}
spring.liquibase.password=${db.password:password}
spring.liquibase.enabled=true

Nú er kominn tími til að skilgreina einfalt samþættingapróf.

@SpringBootTest(webEnvironment = RANDOM_PORT)
@AutoConfigureTestDatabase(replace = NONE)
@ContextConfiguration(initializers = ContainerInit.class)
@Testcontainers
class DummyRepositoryTest {

 @Autowired
 private DummyRepository;

 @Test
 void shouldReturnDummy() {
   var byId = dummyRepository.getById(10L);
   var expected = new Dummy();
   expected.setId(10L);
   assertThat(byId).completes().emitsCount(1).emits(expected);
 }
}

Við höfum nokkrar viðbótarathugasemdir hér.

  • @SpringBootTest(webEnvironment = RANDOM_PORT) – merkir prófið sem Spring Boot-próf og ræsir Spring-samhengi.
  • @AutoConfigureTestDatabase(replace = NONE) – þessar athugasemdir segja að spring test viðbótin ætti ekki að skipta út postgres gagnagrunnsstillingu fyrir H2 í minnisstillingu.
  • @ContextConfiguration(initializers = ContainerInit.class) – auka vor samhengi
    Uppsetning þar sem við stillum eiginleika frá Prófunarílát.
  • @Testcontainers – eins og áður hefur verið nefnt, stýrir þessi athugasemd lífsferli ílátsins.

Í þessu dæmi nota ég reactive-geymslur, en það virkar á sama hátt með venjulegum JDBC- og JPA-geymslum.

Nú getum við keyrt þessa prófun. Ef þetta er fyrsta keyrslan þarf vélin að sækja myndir af docker.hub. Það gæti tekið smá stund. Eftir það munum við sjá að tveir gámar hafa keyrt. Annar er postgres og hinn er Testcontainers-stýringarvélin. Sú seinni gámur sér um að keyra gámana og jafnvel þótt JVM stöðvist óvænt, slökkur hann á gámunum og hreinsar umhverfið.

Skulum draga saman

Prófunarílát eru mjög notendavæn verkfæri sem hjálpa okkur að búa til samþættingapróf sem nota Docker-ílát. Það gefur okkur meiri sveigjanleika og eykur þróunarhraða. Rétt uppsetning próffæribúnaðar dregur úr þeim tíma sem þarf til að taka nýja þróunaraðila inn í teymið. Þeir þurfa ekki að setja upp öll háðakerfi, heldur eingöngu keyra skrifuðu prófin með valin stillingarskrár.

samstarfsfáninn

Tengdar greinar

Myndskreyting af heilbrigðisforriti fyrir snjallsíma með hjartatákni og hækkandi heilsufarsgrafík, merkt með The Codest-merkinu, sem táknar stafræna heilsu og HealthTech-lausnir.
Hugbúnaðarþróun

Heilbrigðis-hugbúnaður: gerðir og notkunartilvik

Tólin sem heilbrigðisstofnanir treysta á í dag líta ekkert út eins og pappírsskjöl frá fyrri áratugum. Heilbrigðisforrit styðja nú heilbrigðiskerfi, sjúklingameðferð og nútímalega heilbrigðisþjónustu á klínískum og...

THECODEST
Yfirlitsmynd sem sýnir hnignandi súlurit með uppstrekktri ör og gullmynt sem táknar kostnaðarhagkvæmni eða sparnað. The Codest-merkið birtist í efra vinstra horni með slagorðinu "In Code We Trust" á ljósgráum bakgrunni.
Hugbúnaðarþróun

Hvernig á að stækka þróunarteymið án þess að fórna gæðum vörunnar

Ertu að stækka þróunarteymið þitt? Lærðu hvernig á að vaxa án þess að fórna gæðum vörunnar. Þessi leiðarvísir fjallar um merki um að kominn sé tími til að stækka, uppbyggingu teymisins, ráðningar, forystu og verkfæri—og hvernig teymið getur...

THECODEST
Hugbúnaðarþróun

Búðu til vefumsóknir sem þola framtíðina: innsýn frá sérfræðiteymi The Codest

Uppgötvaðu hvernig The Codest skarar fram úr við að búa til stigstækar, gagnvirkar vefumsóknir með nýjustu tækni, sem bjóða upp á hnökralausa notendaupplifun á öllum kerfum. Lærðu hvernig sérfræðiþekking okkar knýr fram stafræna umbreytingu og viðskipti...

THECODEST
Hugbúnaðarþróun

Topp 10 hugbúnaðarþróunarfyrirtæki í Lettlandi

Kynntu þér fremstu hugbúnaðarþróunarfyrirtæki Lettlands og nýstárlegar lausnir þeirra í nýjustu grein okkar. Uppgötvaðu hvernig þessir tækniforingjar geta hjálpað til við að efla fyrirtækið þitt.

thecodest
Lausnir fyrir fyrirtæki og vaxtarfyrirtæki

Grunnatriði í Java hugbúnaðarþróun: Leiðarvísir að árangursríkri útvistun

Kannaðu þessa ómissandi leiðbeiningu um árangursríka outsourcing Java hugbúnaðarþróun til að auka skilvirkni, afla aðgangs að sérfræðiþekkingu og tryggja árangur verkefna með The Codest.

thecodest

Gerðu þig áskrifanda að þekkingargrunni okkar og vertu upplýstur um sérfræðiþekkingu upplýsingatæknigeirans.

    Um okkur

    The Codest – Alþjóðlegt hugbúnaðarþróunarfyrirtæki með tæknimiðstöðvar í Póllandi.

    Bretland - Höfuðstöðvar

    • Skrifstofa 303B, 182-184 High Street North E6 2JA
      Lundúnir, England

    Pólland - staðbundin tæknimiðstöðvar

    • Fabryczna skrifstofugarður, Aleja
      Herbergi 18, 31-564 Kraków
    • Brain Embassy, Konstruktorska
      11, 02-673 Varsjá, Pólland

    The Codest

    • Heim
    • Um okkur
    • Þjónusta
    • Case Studies
    • Vitið hvernig
    • Starfsferilmöguleikar
    • Orðabók

    Þjónusta

    • Það er ráðgjafi
    • Hugbúnaðarþróun
    • Bakendaþróun
    • Framhliðþróun
    • Staff Augmentation
    • Bakhliðaráþróunaraðilar
    • Skýjaverkfræðingar
    • Gagnaverkfræðingar
    • Annað
    • Gæðatryggingartæknimenn

    Auðlindir

    • Staðreyndir og goðsagnir um samstarf við utanaðkomandi hugbúnaðarþróunaraðila
    • Frá Bandaríkjunum til Evrópu: Af hverju ákveða bandarísk sprotafyrirtæki að flytja til Evrópu?
    • Samanburður á tæknifjarkerfisþróunarmiðstöðvum: Tech Offshore Europe (Pólland), ASEAN (Filippseyjar), Eurasia (Tyrkland)
    • Hvert eru helstu áskoranir CTO-a og CIO-a?
    • The Codest
    • The Codest
    • The Codest
    • Privacy policy
    • Website terms of use

    Höfundarréttur © 2026 af The Codest. Öll réttindi áskilin.

    is_ISIcelandic
    en_USEnglish de_DEGerman sv_SESwedish da_DKDanish nb_NONorwegian fiFinnish fr_FRFrench pl_PLPolish arArabic it_ITItalian es_ESSpanish nl_NLDutch etEstonian elGreek pt_PTPortuguese cs_CZCzech lvLatvian lt_LTLithuanian is_ISIcelandic