Yksikkötesteillä testataan jonkin koodin osan toimintaa itsenäisesti. Yhden yksikkötestin tulisi kohdistua laajuudeltaan yksittäisen funktion tai luokan sisäiseen toimintaan. Yksikkötesteissä riippuvuudet sovelluksen muihin osiin, ulkopuolisiin sovelluksiin ja kirjastoihin pyritään minimoimaan. Testattavan yksikön vuorovaikutusta muiden osien kanssa voidaan testata korvaamalla oikea riippuvuuden kohde tynkä- tai sijaistoteutuksella (mock, stub, spy) joiden palauttamia arvoja voidaan kontrolloida ja joihin lähetettyjä kutsuja voidaan tarkastella. Yksikkö testien tulisi testata yksiköiden sisäinen logiikka kattavasti ja niiden tulisi olla helposti muutettavissa, jos logiikkaa joudutaan korjaamaan.
Integraatiotestaus on ohjelmiston osien yhteistoiminnan testaamista. Integraatiotestit voivat rajoittua esimerkiksi yhdellä palvelimella suoritettavan ohjelmiston testaamiseen siten että riippuvuudet palvelimen ulkopuolisiin järjestelmiin korvataan paikallisesti ajettavilla sijaistoteutuksilla tai tuotannossa eri palvelimilla ajettavien järjestelmän osien yhteistoiminnan testaamista siten että osia ajetaan omissa säiliöissään (container) yhdellä koneella. Integraatiotesteillä voidaan tarkoittaa myös usean fyysisesti eri palvelimilla tai jopa eri konesaleissa toimivien järjestelmien yhteistoiminnan testaamista tuotannon kaltaisessa ympäristössä. Perinteisissä konesaleissa ei välttämättä ole käytännöllistä ajaa testejä oikeassa palvelinympäristössä, mutta moderneissa pilviympäristöissä palveluiden käyttöönotto on usein niin nopeaa, että integraatiotestaamiseen voidaan pystyttää puhdas, tuotantoympäristöä vastaava testiympäristö, jossa testejä voidaan ajaa hallitusti siten että testaajalla on täysi hallinta järjestelmän komponenttien versioihin, parametreihin ja tilaan, esimerkiksi tietokantojen ja dokumenttivarastojen sisältöön. Integraatiotesteillä ei välttämättä ole mielekästä testata testattavien komponenttien sisäisen toiminnallisuuden jokaista yksityiskohtaa.
Usein ohjelmistolle kirjoitetaan erilliset yksikkö- ja integraatiotestikokoelmat. Käytännön toteutuksissa yksikkö- ja integraatiotestisettien rajat eivät useinkaan ole yhtä selkeät kuin edellä. Varsinkin yksikkötestien joukossa on usein testejä joilla testataan myös hieman isompia kokonaisuuksia ja esimerkiksi usean eri funktion yhteistoimintaa yhdellä testillä. Integraatiotestit taas saattavat laajimmillaan alkaa muistuttaa end-to-end testejä, joilla nimensä mukaisesti tarkoitetaan koko järjestelmä kokonaisuuden testausta loppukäyttäjältä koko järjestelmän läpi (päästä-päähän).
Markus Nousiainen
Senior Consultant