如何在同一个调用中模拟从父对象返回的对象
How do I mock an object being returned from a parent object all on the same call
所以这是我的具体方法中的代码行:
var patron = patronService.GetPatron(new GetPatronRequest() { PatronId = request.PatronId }).Patron;
我的 GetPatron
方法 returns 一个 GetPatronResponse
对象,上面声明了一个 Patron
对象。
到目前为止,这是我的TestMethod
:
[TestMethod]
public void WhenGetPatronPropertyPricingIsCalled_ThenGetPatronPropertyPricingResponseIsReturned()
{
// Given
var request = new GetPatronPropertyPricingRequest
{
PatronId = "1",
ServiceCodes = new List<string> { "1" }
};
var repo = new Mock<IPatronPropertyPricingServiceRepository>();
var patronService = new Mock<IPatronsService>();
var patronPropertyPrice = new PatronPropertyPrice() { CurrencySymbol = "£", ServiceCode = "1", MinimumPrice = 5.00m, MaximumPrice = 10.00m };
var patronResponse = new GetPatronResponse(new GetPatronRequest());
var patronRequest = new GetPatronRequest(){ PatronId = "1"};
// patronService.Setup(x => x.GetPatron(It.IsAny<GetPatronRequest>()).Patron).Returns(patronResponse.Patron);
patronService.Setup(x => x.GetPatron(It.IsAny<GetPatronRequest>()).Patron).Returns(It.IsAny<Patron>());
// patronService.Object.GetPatron(new GetPatronRequest() {PatronId = request.PatronId});
// patronPropertyPrice.Setup(tt => new PatronPropertyPrice() { CurrencySymbol = "£", ServiceCode = "1", MinimumPrice = 5.00m, MaximumPrice = 10.00m });
repo.Setup(repository => repository.GetPropertyPricing(request.PatronId)).Returns(patronPropertyPrice);
var svc = new PersistingPatronPropertyPricingService(repo.Object,patronService.Object);
// When
var response = svc.GetPropertyPricing(request);
// Then
Assert.AreEqual(patronPropertyPrice, response.PatronPropertyPrices);
}
无论我在具体方法中尝试什么,它总是 returns 对象未设置错误或在我尝试设置响应时非虚拟错误的无效设置。
我假设 GetPatron
returns 类似于 PatronResponse
和 Patron
属性。
在那种情况下改变
patronService.Setup(x => x.GetPatron(It.IsAny<GetPatronRequest>()).Patron).Returns(It.IsAny<Patron>());
到
var patronResponse = new PatronResponse { Patron = new Patron() };
patronService
.Setup(x => x.GetPatron(It.IsAny<GetPatronRequest>()))
.Returns(patronResponse);
It.IsAny<T>()
用于设置表达式而不是变量。
所以这是我的具体方法中的代码行:
var patron = patronService.GetPatron(new GetPatronRequest() { PatronId = request.PatronId }).Patron;
我的 GetPatron
方法 returns 一个 GetPatronResponse
对象,上面声明了一个 Patron
对象。
到目前为止,这是我的TestMethod
:
[TestMethod]
public void WhenGetPatronPropertyPricingIsCalled_ThenGetPatronPropertyPricingResponseIsReturned()
{
// Given
var request = new GetPatronPropertyPricingRequest
{
PatronId = "1",
ServiceCodes = new List<string> { "1" }
};
var repo = new Mock<IPatronPropertyPricingServiceRepository>();
var patronService = new Mock<IPatronsService>();
var patronPropertyPrice = new PatronPropertyPrice() { CurrencySymbol = "£", ServiceCode = "1", MinimumPrice = 5.00m, MaximumPrice = 10.00m };
var patronResponse = new GetPatronResponse(new GetPatronRequest());
var patronRequest = new GetPatronRequest(){ PatronId = "1"};
// patronService.Setup(x => x.GetPatron(It.IsAny<GetPatronRequest>()).Patron).Returns(patronResponse.Patron);
patronService.Setup(x => x.GetPatron(It.IsAny<GetPatronRequest>()).Patron).Returns(It.IsAny<Patron>());
// patronService.Object.GetPatron(new GetPatronRequest() {PatronId = request.PatronId});
// patronPropertyPrice.Setup(tt => new PatronPropertyPrice() { CurrencySymbol = "£", ServiceCode = "1", MinimumPrice = 5.00m, MaximumPrice = 10.00m });
repo.Setup(repository => repository.GetPropertyPricing(request.PatronId)).Returns(patronPropertyPrice);
var svc = new PersistingPatronPropertyPricingService(repo.Object,patronService.Object);
// When
var response = svc.GetPropertyPricing(request);
// Then
Assert.AreEqual(patronPropertyPrice, response.PatronPropertyPrices);
}
无论我在具体方法中尝试什么,它总是 returns 对象未设置错误或在我尝试设置响应时非虚拟错误的无效设置。
我假设 GetPatron
returns 类似于 PatronResponse
和 Patron
属性。
在那种情况下改变
patronService.Setup(x => x.GetPatron(It.IsAny<GetPatronRequest>()).Patron).Returns(It.IsAny<Patron>());
到
var patronResponse = new PatronResponse { Patron = new Patron() };
patronService
.Setup(x => x.GetPatron(It.IsAny<GetPatronRequest>()))
.Returns(patronResponse);
It.IsAny<T>()
用于设置表达式而不是变量。