En testdriver er et lille program man laver for at kunne teste et andet program.
Eksempel: Du har programmetret et program der skal styre affyringen af atommissiler og ønsker at teste det. Den nemmeste måde at gøre det ville være at forbinde programmet med raketbasen, men det ville jo så resultere i at der blev affyret et missil og det har du ikke fået lov til. Så istedet laver du en testdriver der kan give de samme reaktioner som raketbasen ville give, men uden at starte WW3. Testdriveren logger de kommandoer den får så vi kan se om dit program gjorde som det skulle.
Ikke helt korrekt, selv om man også vil se ordet "driver" brugt i dette tilfælde: En driver er et lille program man laver for at teste en klasse.
Normalt vil et program være sammensat af mange klasser (altså af objekter af disse). Man ønsker selvfølgelig at teste programmet som et samlet hele – som en færdig applikation, men ved en blot nogenlunde stor applikation (>= 2 klasser) er dette bare ikke nok; man har også brug for at kunne teste hver klasse isoleret hver for sig selv.
Meget ofte skyldes fejl nemlig at en eller flere klasser populært sagt har misforstået, hvordan de skal "tale" med hinanden – fejlen ligger i integrationen mellem de to klasser.
Det er her at driveren kommer ind. Driveren kalder klassen, som skal testes, med forskellige input, og så sammenligner den det resultererende output med det der forventes – med facitlisten. En driver består altså stort set blot af et antal kald af klassen-under-test (KUT). Disse kald fyre dels:
1) lovlige værdier af imod KUT for at se om den giver det rigtige output, dels 2) dels ulovlige værdier af imod KUT for at se om den håndtere fejlsituationer korrekt, dels 3) grænseværdier for at se om KUT håndtere dem korrekt.
Hvis det lovlige input til en given metode er 0-100 så er både 0 og 100 grænseværdier som bør afprøves. Desuden bør man afprøve med f.eks. -1 og 101 for at se om metoden afviser disse. Og man bør afprøve med f.eks. 50 for at verificere om KUT faktisk gør det den forventes at gøre.
driver | kalder v KUT
Der findes et andet beslægtet begreb som kaldes en "stub". Vores KUT vil formentlig forsøge at kalde andre klasser. For at eliminere at en eventuel fejl skyldes en fejle i en af disse andre klasser sætter man en erstatning ind for disse. Dette er en stub:
Som regel ville man lave den som en klasse. Lad os tage udgangspunkt i KUT'en beskrevet ovenfor:
public class KUT { public int gangeTo(int input) { if (input < 0 || 100 < input) { throw new IllegalArgumentException( "Input skal ligge mellem 0 og 100 inklusiv."); }
return input * 2; } }
Så kunne (noget af) driver-klassen se nogenlunde sådan her ud:
public class DriverClassKUT { public static void main(String[] args) { Test1(); Test2(); Test3(); }
// Test af lovlig værdi. private static void Test1() { KUT kut = new KUT(); int output = kut.gangeTo(50); if (output == 100) { System.out.println("Test1 - ok"); } else { System.out.println("Test1 - ikke ok"); } }
// Test af nedre ulovlig værdi. private static void Test2() { KUT kut = new KUT();
Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.