首页 > 解决方案 > MOQ - 使用相同的参数调用相同的方法两次

问题描述

我想模拟该方法的DataServiceGetData

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对象为空。我需要两个对象的值。你能为我提供解决方案吗?

标签: c#unit-testingmoq

解决方案


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

您可以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());
}

您可以参考此博客了解更多详细信息。


推荐阅读