在尝试针对 asp.net 核心管道的组件调试 xUnit 时,我看到了奇怪的行为。下面发布的代码删除了所有有目的的功能,仅用于说明问题:
没有达到我在 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;
}
}
缥缈止盈
相关分类