Tôi đang cố gắng nắm bắt ý tưởng đằng sau TDD là gì và làm thế nào một nhóm được cho là làm việc với nó. Tôi có trường hợp thử nghiệm sau với NUnit + Moq (chỉ viết bằng bộ nhớ, không đảm bảo các biên dịch ví dụ nhưng cần được giải thích):
[Test]
public void WhenUserLogsCorrectlyIsRedirectedToLoginCorrectView() {
Mock<IUserDatabaseRepository> repoMock = new Mock<IUserDatabaseRepository>();
repoMock.Setup(m => m.GetUser(It.IsAny())).Returns(new User { Name = "Peter" });
Mock<ILoginHelper> loginHelperMock = new Mock<ILoginHelper>();
loginHelperMock.Setup(m => m.Login(It.IsAny(), It.IsAny())).Returns(true);
Mock<IViewModelFactory> factoryMock = new Mock<IViewModelFactory>();
factoryMock.Setup(m => m.CreateViewModel()).Returns(new LoginViewModel());
AccountController controller = new AccountController(repoMock.Object, loginHelperMock.Object, factoryMock.Object)
var result = controller.Index(username : "Peter", password: "whatever");
Assert.AreEqual(result.Model.Username, "Peter");
}
AccountContoder có 3 phụ thuộc mà tôi giả định rằng, khi được bố trí bên trong bộ điều khiển, cho phép tôi xác minh xem đăng nhập có đúng hay không.
Điều khiến tôi suy nghĩ là ... nếu trong lý thuyết TDD, trước tiên bạn phải viết bộ kiểm thử của bạn và xây dựng mã của bạn từ đó, làm thế nào tôi phải biết trước rằng để thực hiện thao tác của mình, tôi cần sử dụng ba phụ thuộc đó và hoạt động đó sẽ gọi các hoạt động nhất định? Giống như tôi cần biết các phần bên trong của Bài kiểm tra trước khi thực hiện nó để Mock các phụ thuộc và cô lập lớp, tạo ra một số loại kiểm tra viết - viết mã - sửa đổi kiểm tra nếu cần chu kỳ.
Đương nhiên, không có bất kỳ kiến thức nào về bộ mã của tôi và chỉ thể hiện bài kiểm tra, tôi có thể diễn đạt nó giống như nó chỉ cần ILoginHelper và "giả sử" một cách kỳ diệu trước khi viết mã rằng nó sẽ trả lại cho người dùng khi đăng nhập thành công (và cuối cùng nhận ra rằng khung cơ bản không hoạt động theo cách đó, ví dụ, chỉ trả về một ID thay vì đối tượng đầy đủ).
Tôi có hiểu TDD một cách không chính xác không? Đó là một thực hành TDD điển hình trên một trường hợp phức tạp?
Cảm ơn bạn