基本上,如果我使用MVVM並公開ICommands,我的代表應該公開還是私人?WPF MVVM - 單元測試命令 - 私人與公共方法?
回答
我會讓他們私人的 - 他們不屬於您班級的public interface,這是公共ICommand屬性的用途。
就我個人而言,我會用私人方法去,我會告訴你爲什麼。你正在公開一個ICommand
,對我而言,消費視圖應該在調用Execute之前調用CanExecute。如果他們不這樣做,他們會反對API並在腳下射擊自己,那時它已經失去了你的手。就好像有人用反射來設置一個重要的私有變量,從而導致你的課堂設計無效並因此而崩潰......在腳下自我射擊。那麼爲什麼要讓這些成員保密?因爲不需要公開那些不應該直接調用的成員。
基本上,當你進行單元測試,你不這樣做單獨的成員,您在API打算要執行成員的方式這樣做。所以,你沒有真正測試成員,但另外你正在測試的命令,這又意味着他們應該在一對的特定順序來進行測試:
if (CanExecute)
{
Execute;
}
相當的編輯 - 還是我只是想念的東西? :) –
@chibacity:有時我傾向於咆哮。我之前曾經提過類似單元測試的問題,並且有人告訴我,如果人們違背API,那麼就是這樣。你只能走得這麼遠才能保護某人免於摧毀一個合適的圖書館或應用程序。 –
我有MVVM的東西簡單控制增加,減少按鈕和滑塊顯示值。
如果你有測試的ICommand和INotifyPropertyChanged的,你可以做單元測試的類型:
[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);
}
}
你可以看到,我測試INotifyPropertyChanged的行爲和ICommand的執行
- 1. 嵌套私人方法單元測試
- 2. WPF MVVM單元測試ViewModel?
- 3. 測試內部方法的單元測試公共方法
- 4. 單身人士訪問私人方法訪問公共方法
- 5. 與方法公共方法與私有
- 6. 根據私有方法測試公共方法的方法
- 7. 私人與公共港口
- 8. 公共方法單位測試返回指向私有成員
- 9. 私人與公共的typedef
- 10. 私人與公共繼承
- 11. 公共/私人
- 12. Java測試(公共,私有)
- 13. 私人領域的公共方法
- 14. 公共getter和setter方法私人
- 15. 未測試公共方法
- 16. WPF MVVM光單元測試ViewModels
- 17. Akka的單元測試私有方法
- 18. 私有方法的單元測試c#
- 19. 單元測試私有方法的C#
- 20. 單元測試私有方法
- 21. 鏢,單元測試私有方法
- 22. 單元測試kill命令
- 23. 如何寫私人方法的單元測試
- 24. 你在哪裏把私人方法的單元測試?
- 25. 適用於私人方法的單元測試
- 26. 如何調用公共靜態方法在單元測試
- 27. 單元測試是依賴於其他公共方法
- 28. 私人課堂單元測試
- 29. 私人領域與公共accessor在c + +
- 30. WPF MVVM和命令
+1測試公共接口。 –
雖然我的班級沒有界面,但它只是一個班級。 – michael
@michael類的「公共」方法和屬性的集合被認爲是類的「接口」,因爲這是消費者與該類接口的接口。 – dlev