c# - 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
对象为空。我需要两个对象的值。你能为我提供解决方案吗?
解决方案
如果我正确理解您的问题,您需要在模拟对象上调用相同的方法两次。
您可以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());
}
您可以参考此博客了解更多详细信息。