У меня есть следующие ViewModelМодульное тестирование 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 оп ределяется, как
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();
}
, но это не работает. Как лучше всего проверить, вызван ли мой метод Model, когда вызывается команда в моей модели ViewModel?
Вместо того, чтобы создавать подменю для viewModel, вам, вероятно, захочется сделать «новый viewModel (model.object)» или что-то другое, что эквивалентно замене. Вы не хотите издеваться над объектом, который вы на самом деле тестируете. – forsvarir