Можно ли установить значение метода смоделированного объекта в параметре ссылочного типа? - PullRequest
2 голосов
/ 30 мая 2019

Я использую Moq для модульного тестирования класса.Как настроить поддельный IP-процессор для установки свойства Successful в параметре CreateRequest в значение true?Это вообще возможно?Я посмотрел на функцию обратного вызова, предоставляемую платформой Moq, но не уверен, что она может делать то, что мне нужно в этом сценарии.

public class CreateRequest
{
    public bool Successful { get; set; }
}

public interface IProcessor()
{
    public void Process(CreateRequest createRequest);
}

public class TheClassIAmUnitTesting()
{
    public void SomeMethod()
    {
        CreateRequest createRequest = new CreateRequest();
        processor.Process(createRequest);

        if (createRequest.Successful)
        {
             // do something
        }
        else
        {
             // do somethign else
        }
    }
}

[TestMethod]
public void TheUnitTest()
{
    Mock<IProcessor> mock = new Mock<IProcessor>

    this.mock.setup(x=>x.Process()) //<= what do i do here to have the mock set the boolean Successful property on the CreateRequest parameter to true?
}

Ответы [ 2 ]

1 голос
/ 30 мая 2019

Используйте обратный вызов и получите доступ к переданному аргументу

[TestMethod]
public void TheUnitTest() {
    //Arrange
    Mock<IProcessor> mock = new Mock<IProcessor>();

    mock.Setup(_ => _.Process(It.IsAny<CreateRequest>()))
        .Callback((CreateRequest arg) => arg.Successful = true)
        .Verifiable();

    var subject = new TheClassIAmUnitTesting(mock.Object);

    //Act
    subject.SomeMethod();

    //Assert
    mock.VerifyAll();
}

Ссылка Быстрый запуск Moq: обратные вызовы

1 голос

Вы можете попробовать это

mock.Setup(x=>x.Process(It.IsAny<CreateRequest>()))
  .Callback<CreateRequest>(cr => cr.Successful = true)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...