
[英]Integration test HttpClient using ASP.NET Core 2.0 How to mock DateTime.Now with dependency injection
[英]How to use custom DateTime.now in integration test for ASP.NET Core Web API?
我的项目中有一个应该使用DateTime.Now
的集成测试。
这是我的方法:
public static ErrorResult CheckAvailabiliteOfOrderDeliveryInCurrentTime(string openingTime,string closingTime)
{
var currentTimeString = System.DateTime.Now.ToString("HH:mm:ss");
if (DateTime.Parse(openingTime + ":00") > DateTime.Parse(closingTime + ":00"))
{
if ((DateTime.Parse(currentTimeString) <= DateTime.Parse("23:59:00") &&
DateTime.Parse(currentTimeString) > DateTime.Parse(openingTime + ":00")) ||
(DateTime.Parse(currentTimeString) < DateTime.Parse(closingTime + ":00") &&
DateTime.Parse(currentTimeString) >= DateTime.Parse("00:00:00")))
{
return ErrorResult.None;
}
else
{
return ErrorResult.OutOfDeliveryTime;
}
}
else
{
if (DateTime.Parse(currentTimeString) < DateTime.Parse(closingTime + ":00") &&
DateTime.Parse(currentTimeString) > DateTime.Parse(openingTime + ":00"))
{
return ErrorResult.None;
}
else
{
return ErrorResult.OutOfDeliveryTime;
}
}
}
我调用此方法的处理程序方法:
public async Task<OrderDto> Handle(CreateOrderCommand request, CancellationToken cancellationToken)
{
var validator = new CreateOrderCommandValidator();
var result = await validator.ValidateAsync(request, cancellationToken).ConfigureAwait(false);
if (!result.IsValid)
throw new ValidationException(result);
var foodBusiness = await _context.FoodBusinesses.FindAsync(Guid.Parse(request.FoodBusinessId));
if (foodBusiness == null)
throw new NotFoundException(nameof(FoodBusiness), request.FoodBusinessId);
if (request.Type == OrderTypes.Delivery)
{
var isOutdeliveryTime = DateTimeHelpers.CheckAvailabiliteOfOrderDeliveryInCurrentTime(foodBusiness.OpeningTime, foodBusiness.ClosingTime);
if (isOutdeliveryTime == ErrorResult.OutOfDeliveryTime)
{
var newOrder = new OrderDto();
newOrder.errorDeliveryTimeAvailabilite = ErrorResult.OutOfDeliveryTime;
return _mapper.Map<OrderDto>(newOrder);
}
else
{
var newOrder = await ExecuteOrderOperations(request, cancellationToken, foodBusiness);
return _mapper.Map<OrderDto>(newOrder);
}
}
else
{
var newOrder = await ExecuteOrderOperations(request, cancellationToken, foodBusiness);
return _mapper.Map<OrderDto>(newOrder);
}
}
默认应用程序我们使用System.DateTime.Now
,但在集成测试中,我需要使用我自己的DateTime.Now
- 有什么解决方案吗? 谢谢
您的意见是:
ISystemClock
并让您的单元测试使用模拟。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.