我有以下視圖模型單元測試的ICommand與NSubstitute
public class MyViewModel : IMyViewModel
{
private readonly IMyModel myMode;
private ICommand _myCommand;
public MyViewModel(IMyModel model)
{
_model = model;
}
public ICommand MyCommand
{
get { return _myCommand ?? (_myCommand = new RelayCommand(x => MyMethod())); }
}
private void MyMethod()
{
_model.SomeModelMethod();
}
}
其中IMyViewModel是defind作爲
public interface IMyViewModel
{
ICommand MyCommand { get; }
}
和我的模型界面目前定義爲
public interface IMyModel
{
void SomeOtherCommand();
}
我的單元測試(使用NSubstitute)我想檢查一下,當MyCommand被調用時,我的模型接收到對其會見的呼叫hod SomeModelMethod
。我試過了:
[TestMethod]
public void MyViewModel_OnMyCommand_CallsSomeOtherMethodOnModel()
{
var model = Substitute.For<IMyModel>();
var viewModel = Substitute.For<IMyViewModel>();
viewModel.MyCommand.Execute(null);
model.Received().SomeOtherMethod();
}
但這目前沒有工作。當我的ViewModel上的命令被調用時,如何最好地測試我的Model方法被調用?
與其爲viewModel創建一個substiture,你可能要做'new viewModel(model.object)',或者任何替代等效物。你不想嘲笑你實際測試的對象。 – forsvarir