Bør være raske – kjøres ofte (etter hver endring?)
Andre deler av systemet «mockes»
package inf112.tdd;
import static org.junit.jupiter.api.Assertions.*;
import org.junit.jupiter.api.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
Lag testen først, eller lag feil i koden etterpå
«red-green-refactor» syklus
DRY (Don't repeat yourself)
Oppsett og opprydning: @Before og @After
@ParameterizedTest(name = "g(f({0})) = {0}")
@MethodSource("metodenavn")
@CsvSource(value = { "0,0","1,2","2,4","4,8" })
Effektiv og trygg testing
Test automatisk
Test oppførsel
Test en ting
Prøv ut din egen kode
Tester er dokumentasjon
Tester avslører antagelser
Testkode er også kode
Når skal vi ikke teste?
Systemtester
Ytelsestester
Regresjonstester
Akseptansetester
Utforskende tester
Sikkerhetstesting og penetrasjonstester
Spesifikasjon
Hvor kommer en spesifikasjon fra?
Krav
Use case
Brukerhistorier
Brukerhistorier
Som rolle trenger jeg funksjonalitet for åoppnå nytteverdi