Pengantar Pengujian di Java
Maria Milusheva
Senior Software Engineer
Sejauh ini kita hanya menulis tes setelah kode produksi.
TDD dilakukan dengan menulis tes sebelum menulis kode produksi
Mengapa TDD?
1. Harus menulis tes yang gagal sebelum menulis kode produksi
2. Harus menulis tes sesingkat mungkin
3. Jangan menulis kode produksi lebih dari yang diperlukan agar tes lulus
Menerapkan ini berurutan = satu siklus TDD
Pengembangan berlangsung melalui siklus TDD berulang
Misalkan kita ingin menulis metode yang memeriksa apakah sebuah integer adalah palindrom
Contoh integer palindrom: 12321, 0, 3333
@Test
public void isPalindrome_nonPalindromicInt_returnsFalse() {
int number = 1234;
assertFalse(isPalindrome(number)); // isPalindrome() is not yet written
}
Tes adalah catatan untuk diri kita di masa depan tentang kebutuhan proyek.
public boolean isPalindrome(int num) {
return false; // Write minimal code that fulfills the requirements of the test.
}
Tes kini lulus. Lanjut ke siklus TDD berikutnya.
Tes baru - kebutuhan fitur baru:
@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 sangat membantu memperbaiki bug!
Metode yang baru ditulis mengembalikan true untuk number = -121. Ini tidak benar!
Kita menulis unit test untuk menunjukkan bug:
@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;
}
Pengantar Pengujian di Java