Вы передаете два отдельных экземпляра между установкой и вызовом макета, поэтому он вернет null
по умолчанию.
Вы используете один и тот же экземпляр
[Fact]
public void ProjectTest() {
var ProjectServiceMock = new Mock<IProjectService>();
var ProjectMock = new Mock<IProject>();
IProject project = ProjectMock.Object;
var path = new Path("C:");
ProjectServiceMock.Setup(x => x.CreateProject(path, "S1")).Returns(project);
var addProjectViewModel = new AddProjectViewModel(ProjectServiceMock.Object);
IProjectService obj = ProjectServiceMock.Object;
var result = obj.CreateProject(path, "S1");
}
Или использовать сопоставление параметров для него не имеет значения фактический экземпляр аргумента
[Fact]
public void ProjectTest() {
var ProjectServiceMock = new Mock<IProjectService>();
var ProjectMock = new Mock<IProject>();
IProject project = ProjectMock.Object;
ProjectServiceMock.Setup(x => x.CreateProject(It.IsAny<Path>(), "S1")).Returns(project);
var addProjectViewModel = new AddProjectViewModel(ProjectServiceMock.Object);
IProjectService obj = ProjectServiceMock.Object;
var result = obj.CreateProject(new Path("C:"), "S1");
}
Сделано, замечено, что в основном пытаются протестировать фальшивые рамки. Фактический код не тестируется в предоставленных примерах.
Попробуйте придерживаться подхода AAA с вашим тестом
[Fact]
public void ProjectTest() {
//Arrange
var ProjectServiceMock = new Mock<IProjectService>();
var ProjectMock = new Mock<IProject>();
IProject project = ProjectMock.Object;
ProjectServiceMock
.Setup(x => x.CreateProject(It.IsAny<Path>(), "S1"))
.Returns(project);
//System under test
var addProjectViewModel = new AddProjectViewModel(ProjectServiceMock.Object);
//Act
addProjectViewModel.SomeMethodToTest();
//...assumption is that `CreateProject(new Path("C:"), "S1")` will get called within
//...the method under test
//Assert
//...now assert expected behavior
}
Ссылка Moq Quickstart , чтобы лучше понять, как использовать эту среду для насмешек