Về cơ bản, nếu tôi sử dụng MVVM và hiển thị các IComm công cộng, các đại biểu của tôi có nên là công khai hay riêng tư không?WPF MVVM - Đơn vị Thử nghiệm một lệnh - Riêng tư so với phương pháp công cộng?
Trả lời
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.
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;
}
Khá một chỉnh sửa - hoặc sao tôi chỉ bỏ lỡ một cái gì đó ? :) –
@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. –
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
- 1. Phương pháp riêng Thử nghiệm đơn vị với Jasmine
- 2. Phương pháp riêng thử nghiệm đơn vị: Mẫu mặt tiền
- 3. WPF MVVM và Kiểm thử Đơn vị
- 4. Phương pháp thử nghiệm đơn vị với tệp IO
- 5. Chức năng thử nghiệm đơn vị riêng tư trong Android
- 6. đơn vị thử nghiệm một phương pháp nhà máy
- 7. Khối so với phương pháp riêng tư?
- 8. Thử nghiệm đơn vị Các phương pháp Spring @Around AOP
- 9. Phương pháp thử nghiệm đơn vị phụ thuộc
- 10. Đơn vị thử nghiệm một phương pháp điều khiển?
- 11. Công cụ Java để thử nghiệm các phương pháp riêng tư?
- 12. Thử nghiệm tính năng so với đơn vị kiểm tra
- 13. Khi kiểm thử đơn vị so với thử nghiệm thủ công
- 14. Thử nghiệm đơn vị VS2008 - phương pháp xác thực thoát
- 15. Quá nhiều phương pháp công cộng bị bắt buộc bởi phát triển thử nghiệm theo hướng
- 16. Thử nghiệm đơn vị với Oracle
- 17. Kiểm tra đơn vị phương pháp riêng - mục tiêu C
- 18. Thử nghiệm đơn vị với số đơn
- 19. Phương pháp tĩnh công khai so với phương pháp công cộng
- 20. Mẫu C++ thử nghiệm đơn vị
- 21. Thử nghiệm đơn vị với Spring Security
- 22. Đơn vị thử nghiệm IList với CollectionAssert
- 23. mùi thử nghiệm đơn vị
- 24. Làm cách nào để thử nghiệm các phương thức riêng với DUnit?
- 25. C# Lớp thử nghiệm đơn vị với một hàm tạo riêng?
- 26. Làm cách nào để lấy tên phương thức thử nghiệm đơn vị khi chạy trong thử nghiệm đơn vị?
- 27. Đơn vị thử nghiệm chậm với Cobertura
- 28. Khẳng định rằng một phương pháp được gọi trong một thử nghiệm đơn vị Python
- 29. Đơn vị thử nghiệm Jersey với Mocks
- 30. Thử nghiệm đơn vị với ServiceLocator
+1 Kiểm tra giao diện công khai. –
Lớp của tôi không có giao diện mặc dù, đó chỉ là một lớp học. – michael
@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