【发布时间】:2021-04-12 05:52:01
【问题描述】:
我在单元测试中使用 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);
它正确地向我返回了响应。
但我的问题是 proxy.AutoCancelBooking(request); 函数中有很多场景和类要测试。
我如何测试或模拟这些类和依赖项。
【问题讨论】:
-
要测试
AutoCancelBooking,您不必模拟IMonitorBookingServiceProxy,而是创建实现接口的类并为其提供外部依赖项(通过模拟那些依赖项实例)。然后你可以创建测试用例来检查AutoCancelBooking的逻辑实现。
标签: c# asp.net-mvc unit-testing mocking moq