我正在尝试调试与自定义xUnit实现相关的IModelBinder (S),Visual调试器是:
我的其他xUnits都没有这样的行为。在这一点上,唯一给我带来麻烦的单位是一个与asp.net核心管道相关的单元。我试着清理我的解决方案和重新添加项目推荐人认为一个可能有一个旧的pdb文件?
我使用的是Moq,xUnit,VS2017,ASP.net Core2.2。
// JsonModelBinder
public class JsonModelBinder : IModelBinder
{
private readonly IOptions<MvcJsonOptions> _jsonOptions;
private readonly ILoggerFactory _loggerFactory;
public JsonModelBinder() { }
public JsonModelBinder(IOptions<MvcJsonOptions> jsonOptions, ILoggerFactory loggerFactory)
{
_jsonOptions = jsonOptions;
_loggerFactory = loggerFactory;
}
public Task BindModelAsync(ModelBindingContext bindCtx)
{
string modelName = bindCtx.ModelName;
ValueProviderResult valueProviderResult = bindCtx.ValueProvider.GetValue(modelName);
if (valueProviderResult == ValueProviderResult.None)
{
return Task.CompletedTask;
}
bindCtx.ModelState.SetModelValue(bindCtx.ModelName, valueProviderResult);
string value = valueProviderResult.FirstValue;
if (string.IsNullOrEmpty(value))
{
return Task.CompletedTask;
}
JToken token;
try
{
token = JToken.Parse(value);
}
catch (JsonReaderException)
{
bindCtx.ModelState.TryAddModelError(modelName, "Invalid json object.");
return Task.CompletedTask;
}
catch (Exception ex)
{
bindCtx.ModelState.TryAddModelError(modelName, ex.Message);
return Task.CompletedTask;
}
bindCtx.Result = ModelBindingResult.Success(token);
return Task.CompletedTask;
}
}// xUnits
public class JsonModelBinderFacts
{
[Fact]
public async Task BindModelAsync_WithNullValueProvider_SetsDefaultError()
{
// arrange
var bindingCtx = new Mock<ModelBindingContext>();
bindingCtx
.Setup(x => x.ModelName)
.Returns("Test");
var valueProvider = new Mock<IValueProvider>();
bindingCtx
.Setup(x => x.ValueProvider)
.Returns(valueProvider.Object);
var providerResult = new ValueProviderResult(new StringValues(new []{ "test"}));
valueProvider
.Setup(x => x.GetValue("Test"))
.Returns(providerResult);
var binder = new JsonModelBinder();
// act
await binder.BindModelAsync(bindingCtx.Object)
.ConfigureAwait(false);
// assert
Assert.True(bindingCtx.Object.ModelState.ErrorCount > 0);
}发布于 2019-03-06 20:17:07
如果打开所有异常(Ctrl+Alt+E)并检查公共语言运行时异常,我将获得运行测试的FileNotFound异常。
添加对丢失包的引用(我找到了以下2)
<PackageReference Include="Microsoft.AspNetCore.Http.Abstractions" Version="2.2.0" /> <PackageReference Include="Newtonsoft.Json" Version="11.0.2" />
应该能解决。
HTH
发布于 2019-03-14 19:31:38
我的问题在这篇文章中得到了回答:Asp.net core 2.2 ModelBinder Unit Test Issues
在解决方案根目录中的隐藏.vs文件夹中,有些东西正在损坏。删除此文件夹的内容并重新生成解决方案的工作正常。
https://stackoverflow.com/questions/55014848
复制相似问题