我有一个新的WPF MVVM项目,并希望为我的ViewModel编写“一些有用的”单元测试。
我的ViewModel类:
public class ConsignorViewModel : ViewModel
{
...
#region Commands
void NewModel()
{
_model = new Consignor();
RaisePropertyChanged(String.Empty, validatePropertyName: false);
}
void SaveModel()
{
... //some logic to save
}
public override ICommand New { get { return new RelayCommand(NewModel); } }
public override ICommand Save { get { return new RelayCommand(SaveModel); } }
#endregion
}
我想对这些命令进行单元测试。这样做的最佳方式是什么?
目前,我的单元测试方法看起来像这样:
[TestMethod]
public void TestCommands()
{
//Arrange
//Act
//Assert
////New Command
Assert.IsNotNull(_consignorViewModel.New);
Assert.IsTrue(_consignorViewModel.New is RelayCommand);
////Save Command
Assert.IsNotNull(_consignorViewModel.Save);
Assert.IsTrue(_consignorViewModel.Save is RelayCommand);
}
我想测试命令的行为/结果。 在测试“new”命令时,我想确保模型是“重置”(构造函数调用)。目前这是不可能的,因为我的方法“NewModel”和“SaveModel”在单元测试中不可见,这是正确的,因为它们不是公共接口的一部分。所以我不想让它们公开......
答案 0 :(得分:0)
目前这不可能作为我的方法" NewModel"和" SaveModel"在单元测试中不可见,因为它们不属于公共接口。
他们不应该。你已经知道了这个问题的解决方案,你甚至自己说过:
我想测试命令的行为/结果。
这就是重点。通过单元测试,我们验证可观察效果。用户如何识别模型已重置?用户不了解New
方法,也不应该进行单元测试。如果New
方法没有可观察到的副作用,从公共POV可见,那么您也可以从代码库中删除它。
确定那些公开可见的更改并对其进行测试。