Возврат всегда null moq - PullRequest
0 голосов
/ 06 мая 2018

Я потратил так много времени и видел разные ответы, но не знаю, что случилось, независимо от того, что я делаю, я всегда получаю Возвращаемое значение ноль.

Я хочу, чтобы возвращаемое значение было объектом (фиктивный объект и т. Д.), Над которым я мог бы выполнять операции Assert. Если я нахожусь на неверном пути понимания концепции, пожалуйста, скажите мне.

[Fact]
public void ProjectTest()
{
    var ProjectServiceMock = new Mock<IProjectService>();
    var ProjectMock = new Mock<IProject>();
    IProject project = ProjectMock.Object;
    ProjectServiceMock.Setup(x => x.CreateProject(new Path("C:"), "S1")).Returns(project);
    var addProjectViewModel = new AddProjectViewModel(ProjectServiceMock.Object);

    IProjectService obj = ProjectServiceMock.Object;
    var result = obj.CreateProject(new Path("C:"), "S1");
}

result всегда null.

1 Ответ

0 голосов
/ 06 мая 2018

Вы передаете два отдельных экземпляра между установкой и вызовом макета, поэтому он вернет 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 , чтобы лучше понять, как использовать эту среду для насмешек

...