Bør være raske – kjøres ofte (etter hver endring?)
Andre deler av systemet «mockes»
package inf112.tdd;
import org.junit.Test;
public class ClassNameTest {
@Test
public void whatTheTestShouldVerify() {
ThingToTest ttt = new ThingToTest();
Result expected = new Result().withExpectedValues();
Result result = ttt.methodToBeTested();
assertEquals(expectedValue, result, "Explanation");
}
}
Integrasjonstester
Teste at systemer jobber sammen
F.eks. eget testprosjekt som bruker flere «artifacts»
Eller test-system satt opp med database etc
Vha virtualisering – docker, docker compose
GUI-tester
Tester brukergrensesnitt manuelt eller automatisk
F.eks., er knappene innenfor skjermen?
Skjørt, endrer seg ofte
Usability testing er noe annet!
Mock
Erstatte / kontrollere andre deler av systemet
1) har en funksjon blitt kalt? Klasse blitt opprettet?
2) Hvor mange ganger har en metode blitt kalt?
3) Når en metode kalles (gjerne med spesifikt innhold), returner konfigurert innhold
F.eks. Mockito
Hypotesetesting / Egenskapstester
Spesifiser oppførselen til metoder ved å relatere de til hverandre
Test grundig med tilfeldig genererte data
Tommelfingerregel:
Test hver kombo av metode som observerer og endrer
Hvordan jobbe med tester?
Test-drevet utvikling (TDD)
Testen skal feile først
Det er lett å lage tester som ikke tester det du tror du tester