Introductie tot testen in Java
Maria Milusheva
Senior Software Engineer
Tot nu toe schreven we tests pas na de productcode.
Bij TDD schrijf je tests vóór enige productcode
Waarom TDD doen?
1. Schrijf een falende test vóór je productcode
2. Schrijf de kortst mogelijke test
3. Schrijf niet meer productcode dan nodig is om de test te laten slagen
Deze op volgorde toepassen = één TDD-cyclus
Ontwikkeling gebeurt via herhaalde TDD-cycli
Stel: we willen een methode schrijven die checkt of een geheel getal een palindroom is
Voorbeelden van palindromische getallen: 12321, 0, 3333
@Test
public void isPalindrome_nonPalindromicInt_returnsFalse() {
int number = 1234;
assertFalse(isPalindrome(number)); // isPalindrome() is not yet written
}
Een test is als een notitie aan je toekomstige zelf die herinnert aan de eisen.
public boolean isPalindrome(int num) {
return false; // Write minimal code that fulfills the requirements of the test.
}
Test slaagt nu. We kunnen door naar de volgende TDD-cyclus.
Nieuwe test - nieuwe eis voor de feature:
@Test
public void isPalindrome_PalindromicInt_ReturnsTrue() {
int number = 1234321; // Now write a more complex test case.
assertTrue(isPalindrome(number)); // At this point isPalindrome() will fail.
}
public boolean isPalindrome(int num) {
int inverted = 0;
while (num != 0) {
// At every iteration take the last digit of the number using % 10
// and add it to inverted * 10.
inverted = inverted * 10 + num % 10;
// Now that we have processed the last digit, discard it using / 10.
num = num / 10;
}
return inverted;
}
TDD is top voor bugfixes!
De methode die we net schreven geeft true voor number = -121. Dat klopt niet!
We schrijven een unittest om de bug te laten zien:
@Test
public void isPalindrome_NegativeNumber_ReturnsFalse() {
int number = -121; // Not a palindrome as -121 is not the same as 121-.
assertFalse(isPalindrome(number));
}
public boolean isPalindrome(int num) {
if (num < 0) {
return false; // We add a clause to return false for negative values.
}
int inverted = 0;
while (num != 0) {
inverted = inverted * 10 + num % 10;
num = num / 10;
}
return inverted;
}
Introductie tot testen in Java