Tôi khá mới với TDD và tôi gặp khó khăn khi tạo thử nghiệm đầu tiên của mình khi nó xuất hiện trước bất kỳ mã triển khai nào. Không có bất kỳ khuôn khổ nào đối với mã triển khai, tôi có thể tự do viết bài kiểm tra đầu tiên của mình theo ý muốn nhưng dường như nó luôn bị vấy bẩn bởi cách suy nghĩ về Java / OO của tôi về vấn đề này.
Ví dụ: trong Github ConwaysGameOfLifeExample thử nghiệm đầu tiên tôi đã viết (rule1_zeroNeighbours) Tôi đã bắt đầu bằng cách tạo một đối tượng GameOfLife chưa được triển khai; được gọi là một phương thức thiết lập không tồn tại, một phương thức bước không tồn tại, một phương thức get không tồn tại và sau đó sử dụng một xác nhận.
Các bài kiểm tra đã phát triển khi tôi viết thêm các bài kiểm tra và tái cấu trúc, nhưng ban đầu nó trông giống như thế này:
@Test
public void rule1_zeroNeighbours()
{
GameOfLife gameOfLife = new GameOfLife();
gameOfLife.set(1, 1, true);
gameOfLife.step();
assertEquals(false, gameOfLife.get(1, 1));
}
Điều này cảm thấy kỳ lạ khi tôi buộc thiết kế thực hiện dựa trên cách tôi đã quyết định ở giai đoạn đầu này để viết bài kiểm tra đầu tiên này.
Theo cách mà bạn hiểu TDD thì có ổn không? Tôi dường như tuân theo các nguyên tắc TDD / XP trong đó các thử nghiệm và triển khai của tôi đã phát triển theo thời gian với tái cấu trúc, và vì vậy nếu thiết kế ban đầu này đã chứng minh rằng nó vô dụng, nó sẽ mở ra để thay đổi, nhưng có vẻ như tôi đang buộc phải hướng đến giải pháp bằng cách bắt đầu theo cách này.
Mọi người sử dụng TDD như thế nào? Tôi có thể đã trải qua nhiều lần tái cấu trúc hơn bằng cách bắt đầu không có đối tượng GameOfLife, chỉ có các phương thức nguyên thủy và tĩnh nhưng điều đó dường như quá giả tạo.