Я использую xUnit и Moq .
В моем классе MainViewModel у меня есть метод, который вызывается двумя командами. Метод обновляет несколько свойств:
`
public void CommandCompletedControlsSetup()
{
//TokenSource.Dispose();
UpdateStatusBar = 0;
VisibilityStatusBar = Visibility.Hidden;
ValidateButtons();
ProgressDisplay = "";
WorkStatus = "";
VisibilityCancellingMsg = Visibility.Visible;
VisibilityCancelTestingBtn = Visibility.Collapsed;
VisibilityTestingBtn = Visibility.Visible;
VisibilityCancelUpdatingBtn = Visibility.Collapsed;
VisibilityUpdatingBtn = Visibility.Visible;
}
И я просто хотел избежать тестирования обновления всего метода для каждой команды. Выполнение первой команды:
public void OnUpdateCancellationExecute(object obj)
{
_updateDataService.CancelUpdates();
CommandCompletedControlsSetup(); // here is method call
}
Выполнение второй команды:
public void OnSimulateCancellationExecute(object obj)
{
_simulateDataService.CancelSimulation();
CommandCompletedControlsSetup(); // here is method call
}
Так что вместо того, чтобы сделать это дважды:
[Fact]
public void OnSimulateCancellationExecute_UpdatesViewProps_True()
{
_viewModel.UpdateStatusBar = 1000;
_viewModel.VisibilityStatusBar = Visibility.Visible;
_viewModel.ProgressDisplay = "1000/1000";
_viewModel.WorkStatus = "some status";
_viewModel.VisibilityCancellingMsg = Visibility.Hidden;
_viewModel.VisibilityCancelTestingBtn = Visibility.Visible;
_viewModel.VisibilityTestingBtn = Visibility.Hidden;
_viewModel.VisibilityCancelUpdatingBtn = Visibility.Visible;
_viewModel.VisibilityUpdatingBtn = Visibility.Hidden;
_viewModel.SimulateCancellationCommand.Execute(null);
Assert.Equal(0, _viewModel.UpdateStatusBar);
Assert.Equal(Visibility.Hidden, _viewModel.VisibilityStatusBar);
Assert.Equal("", _viewModel.ProgressDisplay);
Assert.Equal("", _viewModel.WorkStatus);
Assert.Equal(Visibility.Visible, _viewModel.VisibilityCancellingMsg);
Assert.Equal(Visibility.Collapsed, _viewModel.VisibilityCancelTestingBtn);
Assert.Equal(Visibility.Visible, _viewModel.VisibilityTestingBtn);
Assert.Equal(Visibility.Collapsed, _viewModel.VisibilityCancelUpdatingBtn);
Assert.Equal(Visibility.Visible, _viewModel.VisibilityUpdatingBtn);
}
Я хотел сделать что-то вроде этого:
[Fact]
public void CancellationExecuteMethods_UpdatesViewProps_True()
{
_viewModel.SimulateCancellationCommand.Execute(null);
_viewModel.UpdateCancellationCommand.Execute(null);
//MainViewModel does not contain definition for Verify - exception
_viewModel.Verify(sd => sd.CancelUpdates(), Times.Exactly(2));
}
НО MainViewModel не является издевательским, и я не уверен, что могу его смоделировать? Если да, то как? Если нет, есть ли альтернатива для проверки того, что метод VM был вызван? Или я должен просто оставить это как нечто очевидное и просто протестировать метод сам по себе?