C# – 在使用 Moq 第二次调用时将方法模拟为 return 不同的值
C# – Mocking a method to return a different value when called a second time using Moq
我正在使用 Moq 通过异步方法模拟存储库。此方法必须调用 2 次。在第一次调用此方法时,我需要获取空值。其次我需要得到一些参数。如果此方法不是异步的,那么我可以使用
autoMockContext
.Mock<IPopulationReadRepository>()
.SetupSequence(method => method.GetCityForNewClients(It.IsAny<string>(), It.IsAny<string>(), It.IsAny<string>()))
.Returns(null)
.Returns(new Population { Id = 100, CityLongName = "Kharkiv, Kharkivska, Slobozhanshina" });
所以最后一行出错了。结果一定是这样的:
autoMockContext
.Mock<IPopulationReadRepository>()
.Setup(method => method.GetCityForNewClients(It.IsAny<string>(), It.IsAny<string>(), It.IsAny<string>()))
.Returns(null);
autoMockContext
.Mock<IPopulationReadRepository>()
.Setup(method => method.GetCityForNewClients(It.IsAny<string>(), It.IsAny<string>(), It.IsAny<string>()))
.ReturnsAsync(new Entities.Zonning.Population { Id = 100, CityLongName = "Kharkiv, Kharkivska, Slobozhanshina" });
但是我一次调用就需要它?
谢谢,我已经解决了这个问题
autoMockContext
.Mock<IPopulationReadRepository>()
.SetupSequence(method => method.GetCityForNewClients(It.IsAny<string>(), It.IsAny<string>(), It.IsAny<string>()))
.Returns(Task.FromResult<Entities.Zonning.Population>(null))
.Returns(Task.FromResult(new Entities.Zonning.Population { Id = 100, CityLongName = "Kharkiv, Kharkivska, Slobozhanshina" }));
我正在使用 Moq 通过异步方法模拟存储库。此方法必须调用 2 次。在第一次调用此方法时,我需要获取空值。其次我需要得到一些参数。如果此方法不是异步的,那么我可以使用
autoMockContext
.Mock<IPopulationReadRepository>()
.SetupSequence(method => method.GetCityForNewClients(It.IsAny<string>(), It.IsAny<string>(), It.IsAny<string>()))
.Returns(null)
.Returns(new Population { Id = 100, CityLongName = "Kharkiv, Kharkivska, Slobozhanshina" });
所以最后一行出错了。结果一定是这样的:
autoMockContext
.Mock<IPopulationReadRepository>()
.Setup(method => method.GetCityForNewClients(It.IsAny<string>(), It.IsAny<string>(), It.IsAny<string>()))
.Returns(null);
autoMockContext
.Mock<IPopulationReadRepository>()
.Setup(method => method.GetCityForNewClients(It.IsAny<string>(), It.IsAny<string>(), It.IsAny<string>()))
.ReturnsAsync(new Entities.Zonning.Population { Id = 100, CityLongName = "Kharkiv, Kharkivska, Slobozhanshina" });
但是我一次调用就需要它?
谢谢,我已经解决了这个问题
autoMockContext
.Mock<IPopulationReadRepository>()
.SetupSequence(method => method.GetCityForNewClients(It.IsAny<string>(), It.IsAny<string>(), It.IsAny<string>()))
.Returns(Task.FromResult<Entities.Zonning.Population>(null))
.Returns(Task.FromResult(new Entities.Zonning.Population { Id = 100, CityLongName = "Kharkiv, Kharkivska, Slobozhanshina" }));