Tôi đang cố gắng sử dụng lâu đài Windsor trong các thử nghiệm tự động của tôi như vậy:Trong Lâu đài Windsor 3, ghi đè lên một đăng ký thành phần hiện tại trong một thử nghiệm đơn vị
Trên mỗi bài kiểm tra:
- Chức năng
Setup()
tạo ra một Thùng chứa Windsor, đăng ký việc triển khai mặc định của từng thành phần - Chức năng
Test
truy cập các thành phần thông qua phương phápIWindsorContainer.Resolve<T>
và kiểm tra hành vi của chúng TearDown()
chức năng phân phối của thùng chứa Windsor (và bất kỳ thành phần được tạo ra)
Ví dụ, tôi có thể có 15 thử nghiệm truy cập các thành phần gián tiếp dẫn đến việc tạo ra một thành phần IMediaPlayerProxyFactory
. Chức năng SetUp
đăng ký thực hiện đủ tốt IMediaPlayerProxyFactory
, vì vậy tôi không có gánh nặng bảo trì khi đăng ký điều này trong mỗi 15 thử nghiệm.
Tuy nhiên, hiện tôi đang viết bài kiểm tra Test_MediaPlayerProxyFactoryThrowsException
, xác nhận hệ thống của tôi xử lý một lỗi một cách thanh lịch từ thành phần IMediaPlayerProxyFactory
. Trong phương pháp thử nghiệm tôi đã tạo ra thực hiện mô hình đặc biệt của tôi, và bây giờ tôi muốn tiêm nó vào khuôn khổ:
this.WindsorContainer.Register(
Component.For<IMediaPlayerProxyFactory>()
.Instance(mockMediaPlayerProxyFactory)
);
Nhưng Windsor ném một Castle.MicroKernel.ComponentRegistrationException
, với thông điệp "Hiện đã là một thành phần với tên đó. "
Có cách nào để tôi có thể tạo mockMediaPlayerProxyFactory
làm phiên bản mặc định cho IMediaPlayerProxyFactory
, loại bỏ thành phần đã được đăng ký không?
Theo documentation, Lâu đài Windsor 3 cho phép ghi đè đăng ký, nhưng tôi chỉ có thể tìm thấy một ví dụ:
Container.Register(
Classes.FromThisAssembly()
.BasedOn<IEmptyService>()
.WithService.Base()
.ConfigureFor<EmptyServiceA>(c => c.IsDefault()));
ConfigureFor
là một phương pháp của lớp BasedOnDescriptor
. Trong trường hợp của tôi, tôi không sử dụng số FromDescriptor
hoặc BasedOnDescriptor
.
đặt tên và gọi phương thức '.IsDefault' không bắt buộc đối với việc triển khai thực sự, ngoài việc đó, rất hay! – bevacqua
Cảm ơn bạn đã cập nhật câu trả lời. –