Bắt đầu với một nhánh của hàm/lớp/thành phần mà bạn muốn phát triển. Nó nên biên dịch, nhưng cố tình không (chưa) làm những gì nó được cho là phải làm.
Ví dụ:
public int divideNumbers(int num1, int num2)
{
throw new NotImplementedException();
}
hoặc
return -42;
Hãy suy nghĩ về những hành vi dự định, điều trị các stub như một giao diện để một hộp đen. Đừng quan tâm đến việc thực hiện (chưa). Hãy suy nghĩ về "hợp đồng" của giao diện: X đi vào, Y đi ra ngoài.
Xác định các trường hợp chuẩn và các trường hợp egde quan trọng. Viết các bài kiểm tra cho họ.
Để phân chia số nguyên (giả sử chúng tôi viết từ đầu), có một số trường hợp cần xem xét: Có và không còn lại, n/1, n/0, 0/n, 0/0, số âm , v.v.
Assert.IsTrue(divideNumbers(4,4) == 1);
Assert.IsTrue(divideNumbers(4,3) == 1);
Assert.IsTrue(divideNumbers(4,2) == 2);
Assert.IsTrue(divideNumbers(4,1) == 4);
Assert.Throws<ArgumentException>(() => divideNumbers(4,0));
Assert.IsTrue(divideNumbers(0,4) == 0);
Assert.Throws<ArgumentException>(() => divideNumbers(0,0));
Assert.IsTrue(divideNumbers(4,-2) == -2);
Assert.IsTrue(divideNumbers(-4, 2) == -2);
Assert.IsTrue(divideNumbers(-4,-2) == 2);
Assert.IsTrue(divideNumbers(4,-3) == -1);
Assert.IsTrue(divideNumbers(-4, 3) == -1);
Assert.IsTrue(divideNumbers(-4,-3) == 1);
Biên dịch và chạy thử nghiệm đơn vị. Tất cả đều thất bại? Nếu không, tại sao? Có lẽ một trong các bài kiểm tra không hoạt động như dự định (các bài kiểm tra cũng có thể bị lỗi!).
Bây giờ, hãy bắt đầu triển khai cho đến khi thử nghiệm không thành công nữa.
bạn biết rằng bạn đã viết mã trước khi kiểm tra? :) – Rafal