MOQ - дважды вызывать один и тот же метод с одинаковыми параметрами - PullRequest
0 голосов
/ 07 марта 2019

Я хочу смоделировать класс DataService для метода GetData.

Interface IProvider
{
   Response GetAccountInfo();
}

public class Provider:IProvider
{
      public Response GetAccountInfo()
      {
         Response resp = new Response();
         Response resp1 = new Response();
         DataService dataService = new DataService();
         resp = dataService.GetData("Girish" , "Advani" );
         resp1 = dataService.GetData("Pranav" , "Kawle" );

      }
}

Я получаю значение в соответствующем объекте, но объект resp1 равен нулю. Мне нужна ценность обоих объектов. Не могли бы вы предоставить мне решение для этого?

Ответы [ 2 ]

0 голосов
/ 07 марта 2019

Если я правильно понимаю ваш вопрос, вам нужно дважды вызывать один и тот же метод во время работы с объектом.

Для этой цели вы можете использовать setupsequence.

Например, нижеприведенный метод проверки дважды вызывает метод GetNextStuff и возвращает два разных значения каждый раз, когда он вызывается.

[Test]
public void MogMethodThatReturnsADifferentValueWhenCalledASecondTimeUsingSequences()
{
    Mock<ISomeService> _mockSomeService = new Mock<ISomeService>();
    _mockSomeService.SetupSequence(x => x.GetNextStuff())
            .Returns(new SomeStuff {Id = 1, Name = "Real"})
            .Returns(null);

    Assert.IsNotNull(_mockSomeService.Object.GetNextStuff());
    Assert.IsNull(_mockSomeService.Object.GetNextStuff());
}

Вы можете см. Этот блог для получения более подробностей.

0 голосов
/ 07 марта 2019

Я хочу макет интерфейса 1, как показано ниже.

Я думаю, вы можете просто смоделировать свой интерфейс следующим образом:

var mock = new Mock<IProvider>();
var fakeResponse = new Response()
{
    //here set up the fake data
};
mock.Setup(x=>x.GetAccountInfo()).Returns(fakeResponse);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...