如何使用最小起订量 test/mock 外部代码或外部依赖项?

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

我正在使用 Moq 在单元测试中模拟我的代码。在没有外部依赖的情况下模拟代码是可以的。下面的代码是我嘲笑的最后一个依赖项

/// <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);

这是return对我的正确回应。 但我的问题是在 proxy.AutoCancelBooking(request); 函数中有很多场景和 类 需要测试。

我如何测试或模拟 类 和依赖项。

你说在IMonitorBookingServiceProxy.AutoCancelBooking请求函数里面有很多场景需要测试。您要测试 IMonitorBookingServiceProxy.AutoCancelBooking 内的功能还是要根据 IMonitorBookingServiceProxy.AutoCancelBooking 返回的不同响应测试 ExecuteRequest 的功能?

模拟的目的是删除依赖项以测试您的代码,因此,在我的代码中

/// <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 这是不能被模拟的依赖项,这就是为什么我们将生成模拟响应并从上面 return 它功能。我已经做对了。