Nhập môn Kiểm thử trong Java
Maria Milusheva
Senior Software Engineer
Đến giờ ta chỉ viết kiểm thử sau khi có mã sản phẩm.
TDD được thực hiện bằng cách viết kiểm thử trước khi viết mã sản phẩm
Vì sao dùng TDD?
1. Phải viết một kiểm thử thất bại trước khi viết mã sản phẩm
2. Phải viết kiểm thử ngắn nhất có thể
3. Không viết nhiều mã sản phẩm hơn mức đủ để kiểm thử qua
Áp dụng tuần tự = một chu kỳ TDD
Phát triển diễn ra qua các chu kỳ TDD lặp lại
Giả sử ta cần viết phương thức kiểm tra một số nguyên có phải palindrome không
Ví dụ palindrome: 12321, 0, 3333
@Test
public void isPalindrome_nonPalindromicInt_returnsFalse() {
int number = 1234;
assertFalse(isPalindrome(number)); // isPalindrome() is not yet written
}
Bài kiểm thử như một ghi chú cho tương lai, nhắc ta về yêu cầu dự án.
public boolean isPalindrome(int num) {
return false; // Write minimal code that fulfills the requirements of the test.
}
Kiểm thử đã qua. Chuyển sang chu kỳ TDD tiếp theo.
Kiểm thử mới - yêu cầu mới cho tính năng:
@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 rất hiệu quả để sửa lỗi!
Phương thức vừa viết trả về true cho number = -121. Điều này sai!
Ta viết unit test để minh họa lỗi:
@Test
public void isPalindrome_NegativeNumber_ReturnsFalse() {
int number = -121; // Không phải palindrome vì -121 khác 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;
}
Nhập môn Kiểm thử trong Java