MOQ-使用相同的参数两次调用相同的方法

时间:2019-03-07 17:04:56

标签: c# unit-testing moq

我想为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" );

      }
}

我在resp对象中获得了价值,但resp1对象为null。我需要两个对象的值。您能为我提供解决方案吗?

2 个答案:

答案 0 :(得分:0)

  

我想要类似下面的模拟1接口。

我认为您可以像这样模拟您的界面:

var mock = new Mock<IProvider>();
var fakeResponse = new Response()
{
    //here set up the fake data
};
mock.Setup(x=>x.GetAccountInfo()).Returns(fakeResponse);

答案 1 :(得分:0)

如果我正确理解了您的问题,则需要在模拟对象上两次调用相同的方法。

您可以为此目的使用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());
}

您可以refer this blog for more详细信息。