Я новичок в юнит-тестах и издевательствах.Поэтому, пожалуйста, не поджаривайте меня:)
Я написал свой первый очень простой модульный тест, и, похоже, он работает.Но я не понимаю, что происходит.Я пытаюсь проверить, что метод showDialog вызывается с аргументом типа EditViewModel, когда вызывается метод OpenEditView () главного окна.Я использую сервис диалога, чтобы мой код удовлетворял шаблону проектирования MVVM.И я использую фабрику, чтобы напрямую не создавать объект класса модели представления непосредственно в методе, который я хочу протестировать.Фабрика просто создает и возвращает объект, запрашивая его.
При запуске тест проходит.
Как это может произойти, если я не настроил метод CreateEditViewModel для ViewModelFactoryMock?Что именно возвращается методом при вызове во время теста?Или в более широком смысле: насколько сходные объекты похожи на фактический объект?Когда мне нужно настроить методы для объектов, которые можно использовать?
vm.OpenEditView ()
public void OpenEditView()
{
EditViewModel viewModel = viewModelFactory.CreateEditViewModel(Argument1, Argument2, ...);
bool? result = dialogService.ShowDialog(viewModel);
}
Юнит-тест:
[TestClass]
public class UnitTest1
{
[TestMethod]
public void TestMethod1()
{
// Arrange
var DialogServiceMock = new Mock<IDialogService>();
var ViewModelFactoryMock = new Mock<IViewModelFactory>();
DialogServiceMock
.Setup(x => x.ShowDialog(It.IsAny<EditViewModel>()))
.Returns(true)
.Verifiable();
MainWindowViewModel vm = new MainWindowViewModel(DialogServiceMock.Object, ViewModelFactoryMock.Object);
// Act
vm.OpenEditView();
// Assert
DialogServiceMock.Verify(mock => mock.ShowDialog(It.IsAny<EditViewModel>()));
}
}
IViewModelFactory
public interface IViewModelFactory
{
EditViewModel CreateEditViewModel(Argument1, Argument2, ...);
}