De fleste former for testing av oppførsel er basert på eksempler på riktig (eller gal) oppførsel. Siden en sjelden kan sjekke at noe alltid er tilfelle, må en istedet sjekke representative tilfeller. Teknikken består i å rigge opp en eller flere objekter i en start-tilstand og så se hvordan et eller flere av objektene oppfører seg når metoder kalles. Oppførselen sjekkes mot fasiten, altså forventet oppførsel, og avvik rapporteres som feil. Oppførselen til metoder som beregner verdier kan sjekkes direkte, mens oppførselen til metoder som endrer tilstanden må sjekkes indirekte, ved at tilstanden leses ut i etterkant.
Ta som eksempel oppførselen som er illustrert med følgende tilstandsdiagrammer i Tilstand og oppførsel:
Oppførsel til count() og getCounter() | Oppførsel til count() og count(int) |
Slike tilstandsdiagrammer er relativt rett frem å oversette til testkode: En rigger først opp objektene i start-tilstanden, ved å opprette objektene og sette attributtene. Så utføres kallet på en av transisjonene før en sjekker at tilstanden etterpå er slik diagrammet krever. Dersom tilstanden er feil så rapporteres dette, ellers så fortsetter en med denne tilstanden som utgangspunkt for videre testing. Følgende kode tester første og andre tilstand i diagrammet til venstre.
Counter counter = new Counter(1, 3); if (getCounter() != 1) { throw new IllegalStateException("Expected that counter was 1, but it actually was " + getCounter()); } counter.count(); if (getCounter() != 2) { throw new IllegalStateException("Expected that counter was 2, but it actually was " + getCounter()); }