2011-07-28 29 views

Trả lời

11

Tôi sẽ đặt chúng ở chế độ riêng tư - chúng không phải là một phần của lớp học của bạn là public interface, đó là những gì các thuộc tính công khai của ICommand dành cho.

+0

+1 Kiểm tra giao diện công khai. –

+0

Lớp của tôi không có giao diện mặc dù, đó chỉ là một lớp học. – michael

+3

@michael Việc thu thập các phương thức 'public' và các thuộc tính trên một lớp được coi là" giao diện "của lớp, trong đó là cách giao diện người tiêu dùng với lớp đó. – dlev

4

Cá nhân, tôi sẽ đi với các phương pháp riêng tư và tôi sẽ cho bạn biết lý do. Bạn đang phơi bày một số ICommand, mà với tôi nói rằng khung nhìn tiêu thụ nên gọi một CanExecute trước khi gọi một Execute. Nếu họ không làm như vậy, họ sẽ chống lại API và tự bắn mình vào chân và tại thời điểm đó nó nằm ngoài tầm tay bạn. Cũng giống như nếu ai đó sử dụng sự phản chiếu để đặt một biến riêng tư quan trọng thành null và phá vỡ thiết kế lớp học của bạn vì điều này ... hãy tự bắn mình vào chân. Vậy tại sao các thành viên lại riêng tư? Bởi vì không cần phải phơi bày các thành viên không nên gọi trực tiếp.


Về cơ bản, khi bạn kiểm tra các thành viên mà bạn không thực hiện riêng lẻ, bạn làm như vậy trong API dự định cho các thành viên được thực hiện. Vì vậy, bạn không thực sự thử nghiệm các thành viên, nhưng hơn thế nữa bạn đang thử nghiệm lệnh, điều này có nghĩa là chúng sẽ được kiểm tra theo cặp theo thứ tự cụ thể của:

if (CanExecute) 
{ 
    Execute; 
} 
+0

Khá một chỉnh sửa - hoặc sao tôi chỉ bỏ lỡ một cái gì đó ? :) –

+0

@chibacity: Đôi khi tôi có xu hướng rant. Tôi đã hỏi một cái gì đó tương tự trước khi nói đến thử nghiệm đơn vị và ai đó nói với tôi rằng nếu mọi người đi ngược lại API thì đó là trên chúng. Bạn chỉ có thể đi xa để bảo vệ ai đó khỏi phá hủy một thư viện hoặc ứng dụng thích hợp. –

2

Tôi có MVVM để điều khiển đơn giản các nút tăng, giảm và giá trị Hiển thị thanh trượt.

Nếu bạn có ICommand thử nghiệm và INotifyPropertyChanged, bạn có thể làm cho loại UnitTest:

[TestMethod] 
public void TestViewModel3() 
{ 
    int min = -10; 
    int max = 10000; 
    int initVal = 50; 
    bool initState = false; 

    ToglledSliderModel model = new ToglledSliderModel(initState, initVal, min, max); 
    ToglledSliderViewModel viewModel = new ToglledSliderViewModel(); 
    viewModel.Model = model; 

    int status = 567; 
    viewModel.PropertyChanged += delegate 
    { 
     status = 234; 
    }; 

    for (int i = 1; i < 100; i++) 
    { 
     status = 567; 
     ICommand ic = viewModel.IncreaseValue; 
     ic.Execute(this); 
     Thread.Sleep(2); 
     Assert.AreEqual(status, 234); 
     Assert.AreEqual(model.SliderValue, initVal + i); 
    } 
} 

bạn thấy, tôi kiểm tra hành vi INotifyPropertyChanged và ICommand thực hiện

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