Testauksen hallinta: JUnit, Mockito ja integraatiotestit · Oppitunti

Refaktorointi testattavuutta varten

Oppikaa, miten TDD johtaa luontevasti parempaan koodisuunnitteluun ja miten refaktoroidaan turvallisesti testeihin luottaen.

Oppitunti 3/411 vaihetta

Refaktorointi testattavuutta varten on ilmainen Testauksen hallinta: JUnit, Mockito ja integraatiotestit-oppitunti CoddyKitissä. Tämä on oppitunti 3/4. Voit lukea tästä oppimispolusta kokonaan mitkä tahansa 3 oppituntia ilmaiseksi — sen jälkeen CoddyKit PRO avaa kaikki oppitunnit sekä käytännön harjoittelun sisäänrakennetulla koodieditorilla ja ympäri vuorokauden toimivalla tekoälytuutorilla. Oppitunti kuuluu Testauksen hallinta: JUnit, Mockito ja integraatiotestit-oppimispolkuun, ja edistymisesi synkronoituu verkon ja CoddyKit-sovelluksen välillä. Testauksen hallinta: JUnit, Mockito ja integraatiotestit-kurssilla on yhteensä 4 oppituntia.

Refaktorointi TDD:ssä: johdanto

Testivetoisessa kehityksessä (TDD) Refactor-vaihe on ratkaisevan tärkeä. Kun epäonnistuva testi on kirjoitettu (Red) ja saatu läpäistyä (Green), siirrytään Refactor-vaiheeseen.

Refaktorointi tarkoittaa koodin sisäisen rakenteen parantamista muuttamatta sen ulkoista toimintaa. Tavoitteena on tehdä koodista selkeämpää, luettavampaa ja helpommin ylläpidettävää.

Testien tarjoama turvaverkko

Miksi refaktorointi on TDD:ssä turvallista? Koska käytössänne on kattava joukko läpäistyjä testejä!

  • Luottamus: Testit toimivat turvaverkkona ja varmistavat, etteivät rakenteelliset muutokset aiheuta uusia virheitä.
  • Palaute: Jos testi epäonnistuu refaktoroinnin jälkeen, tiedätte heti rikkoneenne jotakin ja voitte kumota muutoksen tai korjata sen.

Tämä luottamus mahdollistaa koodin laadun jatkuvan parantamisen.

Mitä testattava koodi on?

Refaktorointi johtaa luonnostaan helpommin testattavaan koodiin. Mutta mikä tekee koodista testattavaa?

  • Pieni ja kohdennettu: Koodiyksiköt (metodit, luokat) tekevät yhden asian hyvin.
  • Löyhä kytkentä: Komponenteilla on vain vähän riippuvuuksia toisistaan.
  • Selkeät vastuut: Jokaisella luokalla tai metodilla on yksi tarkasti määritelty tarkoitus.

Nämä periaatteet helpottavat yksittäisten osien eristämistä ja testaamista.

Koodihaju: piilotetut riippuvuudet

Tarkastellaan luokkaa, joka käsittelee tietoja ja myös kirjaa viestejä suoraan konsoliin. Tämä luo piilotetun riippuvuuden System.out-objektiin, minkä vuoksi käsittelylogiikkaa on vaikeampi testata erillään.

Haluamme testata, toimiiko processData, emme sitä, toimiiko System.out.println!

Esimerkki: vaikeasti testattava koodi

Tässä on yksinkertainen ReportGenerator. Huomaa, kuinka se käyttää suoraan System.out.println-metodia. Tämän vuoksi raportin muodostuslogiikkaa on vaikea testata näkemättä konsolin tulostetta.

public class ReportGenerator {
  public String generateReport(String data) {
    // Simulate some complex processing
    String processedData = "Processed: " + data.toUpperCase();
    System.out.println("Log: Report generated for " + data);
    return processedData;
  }

  public static void main(String[] args) {
    ReportGenerator generator = new ReportGenerator();
    System.out.println(generator.generateReport("sales"));
  }
}

Refaktorointi: rajapinnan erottaminen

Testattavuuden parantamiseksi voimme ottaa lokitukseen käyttöön rajapinnan. Tämä irrottaa ReportGenerator-luokan tietystä lokitustoteutuksesta.

Rajapinta määrittää sopimuksen: mitä metodeja luokan on toteutettava.

public interface Logger {
  void log(String message);
}

public class ConsoleLogger implements Logger {
  @Override
  public void log(String message) {
    System.out.println("Console: " + message);
  }
}

Refaktorointi: riippuvuuksien injektointi

Voimme nyt injektoida Logger-riippuvuuden ReportGenerator-luokan konstruktoriin. Tätä kutsutaan riippuvuuksien injektoinniksi.

ReportGenerator ei enää luo lokittajaansa, vaan vastaanottaa sen. Näin testauksen aikana on paljon helpompi välittää sille mock-lokittaja.

public interface Logger {
  void log(String message);
}

public class ConsoleLogger implements Logger {
  @Override
  public void log(String message) {
    System.out.println("Console: " + message);
  }
}

public class ReportGenerator {
  private final Logger logger;

  public ReportGenerator(Logger logger) {
    this.logger = logger;
  }

  public String generateReport(String data) {
    String processedData = "Processed: " + data.toUpperCase();
    logger.log("Report generated for " + data);
    return processedData;
  }

  public static void main(String[] args) {
    Logger consoleLogger = new ConsoleLogger();
    ReportGenerator generator = new ReportGenerator(consoleLogger);
    System.out.println(generator.generateReport("sales"));
  }
}

Testattavuuden etu

Riippuvuuksien injektoinnin ansiosta testaaminen on paljon yksinkertaisempaa:

  • Tuotantokoodissa voitte välittää oikean ConsoleLogger-olion.
  • Yksikkötesteissä voitte välittää testisijaisen (kuten mock-olion), joka tallentaa kutsut ilman varsinaista konsolitulostetta. Näin voitte varmistaa, että logger.log()-metodia kutsuttiin odotetusti vaikuttamatta testitulosteeseen.

Tämä tekee ReportGenerator-luokan logiikasta aidosti eristettyä ja testattavaa.

Jatkuva parantaminen

Refaktorointi ei ole kertaluonteinen tapahtuma, vaan jatkuva tapa TDD-syklin aikana. Jokaisen läpäistyn testin jälkeen pysähtykää hetkeksi etsimään tapoja parantaa koodia.

  • Partiopoikasääntö: Jättäkää leiripaikka aina siistimpään kuntoon kuin löysitte sen. Soveltakaa tätä koodiin: jättäkää moduuli aina siistimpään kuntoon kuin se oli työn aloittaessanne.

Näin koodikanta kehittyy luonnostaan kohti parempaa suunnittelua ja korkeampaa laatua.

Refaktoroinnin hyötyjen tarkistus

Pohditaan refaktoroinnin hyötyjä testattavuuden kannalta.

Kertaus: refaktorointi TDD:ssä

Tässä oppitunnissa tutustuimme TDD:n ratkaisevaan Refactor-vaiheeseen. Opimme, että läpäistyjen testien tukemana refaktorointi mahdollistaa koodin suunnittelun turvallisen parantamisen muuttamatta sen toimintaa.

  • Näimme, kuinka refaktorointi johtaa helpommin testattavaan koodiin edistämällä löyhää kytkentää ja riippuvuuksien injektointia.
  • Tämä mahdollistaa yksiköiden helpomman eristämisen testausta varten sekä testisijaisten yksinkertaisemman käytön.
  • Refaktorointi on jatkuva prosessi, joka parantaa koodin laatua ja ylläpidettävyyttä ajan myötä.

Jatkakaa refaktorointia rakentaaksenne vankkaa ja siistiä ohjelmistoa!

Aloita maksutta

Opi Testauksen hallinta: JUnit, Mockito ja integraatiotestit tekoälytuutorin avulla — ilmaiseksi

Kirjoita ja suorita oikeaa koodia selaimessa, saa välitöntä apua tekoälytuutorilta ympäri vuorokauden ja jatka siitä, mihin jäit, verkossa tai sovelluksessa.

Kurssit
12
Oppitunnit
48

Usein kysytyt kysymykset

Onko oppitunti ”Refaktorointi testattavuutta varten” ilmainen?

Kyllä — voit lukea täällä verkossa kokonaan ilmaiseksi mitkä tahansa Testauksen hallinta: JUnit, Mockito ja integraatiotestit-oppimispolun 3 oppituntia, myös oppitunnin “Refaktorointi testattavuutta varten”. Sen jälkeen CoddyKit PRO avaa kaikki oppitunnit sekä interaktiiviset harjoitukset sisäänrakennetulla koodieditorilla ja ympäri vuorokauden toimivalla tekoälytuutorilla. Testauksen hallinta: JUnit, Mockito ja integraatiotestit-kurssilla on yhteensä 4 oppituntia.

Mitä opin oppitunnilla ”Refaktorointi testattavuutta varten”?

Oppikaa, miten TDD johtaa luontevasti parempaan koodisuunnitteluun ja miten refaktoroidaan turvallisesti testeihin luottaen. Harjoittelet Testauksen hallinta: JUnit, Mockito ja integraatiotestit-aihetta koodilla, jonka suoritat suoraan selaimessa. Ympäri vuorokauden käytettävissä oleva tekoälytuutori vastaa kysymyksiisi oppitunnin aikana.

Tarvitsenko kokemusta aloittaakseni Testauksen hallinta: JUnit, Mockito ja integraatiotestit-opiskelun?

Aiempi kokemus ei ole tarpeen. CoddyKitin Testauksen hallinta: JUnit, Mockito ja integraatiotestit-oppimispolku sopii vasta-alkajista edistyneisiin, joten voit aloittaa tästä tai alusta ja edetä omaan tahtiisi. Tämä on oppitunti 3/4.

Kuinka kauan ”Refaktorointi testattavuutta varten”-oppitunnin suorittaminen kestää?

Useimmat CoddyKitin oppitunnit kestävät noin 5–10 minuuttia. Jokainen oppitunti on lyhyt ja interaktiivinen, joten edistyt tasaisesti ja voit jatkaa siitä, mihin jäit – sekä verkossa että sovelluksessa.

Voinko kirjoittaa ja suorittaa koodia tällä Testauksen hallinta: JUnit, Mockito ja integraatiotestit-oppitunnilla?

Kyllä. Jokainen Testauksen hallinta: JUnit, Mockito ja integraatiotestit-oppitunti sisältää sisäänrakennetun koodieditorin, joten voit kirjoittaa ja suorittaa oikeaa koodia suoraan selaimessa ja saada välitöntä palautetta tekoälyltä – paikallista asennusta ei tarvita.

Kaikki tämän kurssin oppitunnit

  1. TDD-syklin esittely
  2. Testien kirjoittaminen ensin
  3. Refaktorointi testattavuutta varten
  4. TDD:n kolme lakia
← Takaisin: Testauksen hallinta: JUnit, Mockito ja integraatiotestit