Introduktion till testning i Java
Maria Milusheva
Senior Software Engineer
Två nyckelbegrepp:
Enhet – den minsta testbara delen av en applikation, till exempel en metod
Enhetstestning – ett test som verifierar att en enskild "enhet" av koden fungerar korrekt, isolerat från övriga delar
Att tänka på:
Enhetstestning handlar om små logikdelar, inte helheten
Andra testtyper fokuserar på helheten (t.ex. integrationstestning)
JUnit har fått sitt namn eftersom enhetstestning är dess primära användningsområde



assertTrue() kontrollerar att ett påstående är sant: List<String> list = new ArrayList<>();
assertTrue(list.isEmpty()); // No error
assertFalse() kontrollerar det motsatta:List<String> list = new ArrayList<>();
list.add("A");
assertFalse(list.isEmpty()); // No error
null-variabler kan orsaka NullPointerException!
Assertions som kontrollerar om en variabel är eller inte är null – assertNull() och assertNotNull()
Vanligt användningsfall: verifiera att ett hämtat värde inte är null
Map<String, Integer> catalogue = new HashMap<>();
catalogue.put("item1", 10);
// No errors
assertNotNull(catalogue.get("item1"));
assertNull(catalogue.get("item2"));
Anta att vi vill verifiera att ett ArrayIndexOutOfBoundsException kastas:
public String getIndex(String[] array, int index) {
return array[index];
}
JUnit erbjuder flera sätt att göra detta!
JUnit erbjuder assertThrows(), men det kräver avancerad Java-syntax (lambdauttryck)
assertInstanceOf() kan användas på följande sätt:
try {
getIndex(new String[]{}, 4);
} catch (Exception e) {
// Pass the expected class of the exception and the exception itself
assertInstanceOf(ArrayIndexOutOfBoundsException.class, e);
}
Ett typiskt projekt innehåller hundratals enhetstester
De bör vara lättviktiga och enkla att förstå
De bör ha informativa namn så att det direkt framgår vad som gick fel om ett test misslyckas
Till exempel: methodUnderTest_expectedBehavior_conditions()
Introduktion till testning i Java