Я вижу странное поведение при попытке отладки xUnits для компонентов основного конвейера asp.net. Приведенный ниже код имеет все целенаправленные функциональные возможности, выделенные только для иллюстрации проблемы:
- Не все мои точки останова в JsonModelBinder.
- Не завершается при «возврате Task.Completed», даже если он оценивается.
Рабочий код для JsonModelBinder содержит больше логики для десериализации входящих данных строки. Этот код содержит логику сбоя, которая содержит ряд возвращаемых операторов Task.Completed. При использовании этого кода отладчик будет оценивать эти операторы возврата, но продолжит работу, не возвращаясь до достижения конца метода, всегда достигая конца.
Я использую Moq, xUnit, VS2017, ASP.net Core 2.2.
// Простой факт
[Fact]
public async Task BindModelAsync_WithNullValueProvider_SetsDefaultError()
{
// arrange
var queryStringCollection = new RouteValueDictionary
{
{"Page", "1"},
{"Size", "20"}
};
var valueProvider = new RouteValueProvider(BindingSource.Path, queryStringCollection);
ModelBindingContext bindingContext = new DefaultModelBindingContext
{
ModelName = "Test",
ValueProvider = valueProvider
};
var jsonBinder = new JsonModelBinder();
// act
await jsonBinder.BindModelAsync(bindingContext);
// not point in asserting :-)
}
// JsonModelBinder
public class JsonModelBinder : IModelBinder
{
private readonly IOptions<MvcJsonOptions> _jsonOptions;
private readonly ILoggerFactory _loggerFactory;
public JsonModelBinder() { }
public Task BindModelAsync(ModelBindingContext bindCtx)
{
string modelName = bindCtx.ModelName;
Debug.Print(modelName);
if (string.IsNullOrEmpty(modelName))
{
return Task.CompletedTask;
}
return Task.CompletedTask;
}
}
** Редактировать для проекта Refs