Testing

Testing ~==Verifikasjon

Hvordan tester vi?

Oppbygning av en test

Given …,

When …,

Then ….

Enhetstester

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
  • 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

Som rolle trenger jeg funksjonalitet for å

oppnå nytteverdi

Roller

Ulike egenskaper hos brukere/roller