Automaattitestit

Kurssin viikkotehtävien testaamisessa käytetään automaattitestejä. Niillä on se hyvä puoli, että saat samantien tietää, läpäisikö ohjelmasi testit ja kuinka paljon pisteitä sait.

Automaattitestien haittapuolena on se, että tehtävänannossa näytetyt tulostukset pitää olla täsmälleen oikein. Lisäksi automaattitestien antamat virheilmoitukset saattavat joskus olla vaikeita tulkita. Tästä syystä tähän kohtaan on koottu tarkistuslista asioista, jotka on syytä käydä läpi, jos ihmettelet automaattitestien palautetta.

  • Vertaa huolellisesti testerin näyttämiä eroja oman tulostuksesi ja mallituloksen välillä. Pienikin ero (iso/pieni kirjain, ylimääräinen/puuttuva välilyönti) on testerille oleellinen.

  • Tarkista, ettei keskustietovarastossasi ole kääntäjän generoimia tiedostoja tai hakemistoja (build-alkuisia hakemistoja, .o-loppuisia tiedostoja ym.). Jos tällaisia tiedostoja/hakemistoja löytyy, poista ne, sillä niiden olemassaolo saattaa estää testerin kääntäjän toiminnan.

    • Älä missään tapauksessa poista tiedostoja web-käyttöliittymän kautta, vaan poista ne ensin paikallisesti omasta hakemistostasi ja puske sitten muutos keskustietovarastoosi.
    • Välttääkseni yllä mainitun ongelman jatkossa, kannattaa tehdä .gitignore-tiedosto (ks. kohdat 1.8 ja 1.8.1).
  • Alustamattomat muuttujat aiheuttavat usein vaikeasti tulkittavia varoituksia tai virheitä ohjelman toiminnassa. Tarkista siis, että kaikki muuttujat alustetaan. Huomaa myös alustaa luokan jäsenmuuttujat eli attribuutit.

  • Jos testeri ei anna mitään palautetta eli testi jää jumiin, kannattaa epäillä ohjelman jäämistä ikuiseen silmukkaan. (Jumitus voi joskus johtua myös palvelimen häiriöstä, mutta silloin yleensä auttaa tehtävän palauttaminen uudelleen jonkin ajan kuluttua.)

  • Jos automaattitesti antaa varoituksen:

    control reaches end of non-void function...
    

    se tarkoittaa, että jostakin arvon palauttavasta funktiosta puuttuu return-lause, tai return-lause sijaitsee if-rakenteen sisällä siten, että kääntäjä antaa varoituksen.

  • Joissakin (varsinkin isommissa) tehtävissä käytetään yksikkötestejä. Niillä tarkoitetaan testejä, jotka testaavat, toimiiko yksittäinen funktio oikein. Tällöin ei siis riitä, että ohjelma kokonaisuudessaan toimii oikein, vaan jokaisen funktion pitää toimia oikein.

    • Jos funktion suoritus riippuu esim. toisen funktion palauttamasta arvosta, niin yksikkötesti saattaa epäonnistua siten, että ongelma onkin toisessa funktiossa eikä siinä funktiossa, josta testeri valittaa.
    • Yksikkötesti epäonnistuu, jos funktio tulostaa jotain, mitä sen ei pitäisi tulostaa, eli ohjelma näyttää toimivan oikein, mutta tulostus suoritetaan väärässä paikassa.

Tärkeää

Ohjelmia pitää ehdottomasti testata myös muilla syötteillä kuin tehtävänannon esimerkeissä annetuilla!!!