tôi đã thiết kế một ứng dụng sử dụng các mô hình kho, và sau đó một lớp dịch vụ riêng biệt như thế này:TDD - Bạn muốn kiểm tra Lớp dịch vụ của mình bằng một Kho lưu trữ giả, nhưng làm cách nào?
public class RegistrationService: IRegistrationService
{
public void Register(User user)
{
IRepository<User> userRepository = new UserRepository();
// add user, etc
}
}
Như bạn thấy, tôi đang instantiating kho của tôi bên trong của phương pháp Đăng ký. Bây giờ khi tôi muốn viết một số bài kiểm tra đơn vị, tôi không thể thực sự nhận được nó và thay thế nó bằng một kho lưu trữ giả có thể tôi?
Tôi không muốn thêm kho lưu trữ dưới dạng biến lớp (và đặt thông qua hàm tạo) vì tôi nghĩ điều đó sẽ làm cho mã của tôi "có mùi" (không phải tất cả kho đều cần cho tất cả các phương pháp và tôi không t cần lớp gọi để biết về kho lưu trữ, vv).
Đề xuất?
Bạn đang đi đúng hướng, nhưng chuyển sang một phụ thuộc thông qua hàm tạo không làm cho mã của bạn có mùi. Nó là một hiệu trưởng thiết kế được chấp nhận (Inversion of Control). – ebrown
Đây là một cuộc nói chuyện thực sự tốt về Thử nghiệm Đơn vị với DI: http://www.youtube.com/watch?v=wEhu57pih5w –