基本上,如果我使用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