如何在同一个调用中模拟从父对象返回的对象

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 类似于 PatronResponsePatron 属性。

在那种情况下改变

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>() 用于设置表达式而不是变量。