2011-04-19 26 views
5

Tôi là một người mới trong thử nghiệm đơn vị. Stumbled khi một vấn đề của đơn vị kiểm tra một tài sản tải lười biếng và tự hỏi nếu có một giải pháp đơn giản để rằng:Cách đơn giản để kiểm tra đơn vị tài sản tải lười biếng

private SubscriptionType _subscriptionType; 
public SubscriptionType SubscriptionType 
{ 
    get 
    { 
     if (_subscriptionType == null ||_subscriptionType.SubscriptionTypeId != this.SubscriptionTypeId) 
     { 
      if (this.SubscriptionTypeId !=0) 
       _subscriptionType = SubscriptionType.Load(this.SubscriptionTypeId); 
     } 

     return _subscriptionType; 
    } 
} 

Tôi cần phải kiểm tra logic trong tài sản (nếu báo cáo) và không phải là chức năng tải SubscriptionType thực tế - có vẻ giống như cách tiếp cận rõ ràng nhất ở đây có lẽ sẽ là trừu tượng SubscriptionType.Load và sử dụng một số loại IoC để thay thế bằng một phương thức giả. Tôi chỉ tự hỏi nếu có cách nào đơn giản hơn để tránh loại tái cấu trúc này - có vẻ như hơi quá tải chỉ để viết một trường hợp kiểm thử đơn vị chính xác. Suy nghĩ của bạn? Cảm ơn!

+4

Nhìn vào lớp Lazy trong .NET 4. Sử dụng điều đó, bạn sẽ có ít mã hơn - có lẽ không có gì thậm chí có giá trị thử nghiệm đơn vị –

+1

Bạn đang cố kiểm tra cái gì? Thực tế là tài sản có chứa dữ liệu chính xác hoặc thực tế là nó được tải theo cách lười biếng? – zerkms

+0

Đang cố gắng kiểm tra logic mà nó gọi khi tải khi điều kiện được đáp ứng và bỏ qua Tải khác – DSY

Trả lời

5

Trừ khi bạn muốn dùng TypeMock Isolator hoặc Moles, bạn sẽ phải ẩn phương thức Load phía sau một giao diện và đưa nó vào lớp. Không có cách nào xung quanh nó, nhưng bạn sẽ không chỉ làm điều đó vì lợi ích của testability. Thông thường, bạn cũng có xu hướng phân tách mối quan tâm tốt hơn từ việc tái cấu trúc như vậy.

Các vấn đề liên quan