[英]Asp.net core 2.2 ModelBinder Unit Test Issues
在尝试针对 asp.net 核心管道的组件调试 xUnit 时,我看到了奇怪的行为。 下面发布的代码删除了所有有目的的功能,仅用于说明问题:
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;
}
}
**编辑项目参考
我的一位同事遇到了同样的问题。 经过大量调试和调查,我们发现这为他解决了问题。
最后一步似乎是重要的部分。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.