簡體   English   中英

如何使用 moq 測試/模擬外部代碼或外部依賴項?

[英]How can I test/mock external code or external dependencies using moq?

我在單元測試中將最小起訂量用於我的代碼的 mocking。 在沒有外部依賴的情況下模擬代碼是可以的。 下面的代碼是我嘲笑的最后一個依賴項

/// <summary>
/// Executes the request.
/// </summary>
/// <param name="booking">The booking.</param>
protected override void ExecuteRequest(BookingModel.Booking booking)
{
    var request = this.CreateRequest(this.TravelContext, booking);
    using (var proxy = this.TravelContext.CreateProxy<IMonitorBookingServiceProxy>())
    {
        var response = proxy.AutoCancelBooking(request);
        this.AddResponseInfos(response.ResponseInfos);
    }
}

我像這樣模擬上面的代碼

// mock the IMonitorBookingServiceProxy
Mock<IMonitorBookingServiceProxy> mockedMonitorBookingContext = new Mock<IMonitorBookingServiceProxy>() { DefaultValue = DefaultValue.Mock };
mockedMonitorBookingContext.Setup(x => x.AutoCancelBooking(It.IsAny<AutoCancelBookingRequest>())).Returns(autoCancelBookingResponse).Verifiable();
ProxyFactory.Configure<IMonitorBookingServiceProxy>(mockedMonitorBookingContext.Object);

它正確地向我返回了響應。 但我的問題是在proxy.AutoCancelBooking(request);中有很多場景和類要測試。 function。

我如何測試或模擬該類和依賴項。

你說IMonitorBookingServiceProxy.AutoCancelBooking請求function里面有很多場景需要測試。 您想測試IMonitorBookingServiceProxy.AutoCancelBooking中的功能,還是想根據IMonitorBookingServiceProxy.AutoCancelBooking返回的不同響應測試ExecuteRequest的功能?

mocking 的目的是刪除依賴項以測試您的代碼,所以,在我的代碼中

/// <summary>
/// Executes the request.
/// </summary>
/// <param name="booking">The booking.</param>
protected override void ExecuteRequest(BookingModel.Booking booking)
{
    var request = this.CreateRequest(this.TravelContext, booking);
    using (var proxy = this.TravelContext.CreateProxy<IMonitorBookingServiceProxy>())
    {
        var response = proxy.AutoCancelBooking(request);
        this.AddResponseInfos(response.ResponseInfos);
    }
}

當我調用proxy.AutoCancelBooking(request); 它調用 Web API 這是無法模擬的依賴項,這就是為什么我們將生成模擬響應並從上面的 function 返回它的原因。 我已經做得對了。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM