Asp.net core 2.2 ModelBinder 单元测试问题

在尝试针对 asp.net 核心管道的组件调试 xUnit 时,我看到了奇怪的行为。下面发布的代码删除了所有有目的的功能,仅用于说明问题:

  1. 没有达到我在 JsonModelBinder 中的所有断点。

  2. 即使正在评估它,也不会在“返回 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;

    }

}

http://img1.mukewang.com/634a51b80001996807590199.jpg

隔江千里
浏览 71回答 1
1回答

缥缈止盈

我的一位同事遇到了同样的问题。经过大量调试和调查,我们发现这为他解决了问题。右键单击 Visual Studio 中的解决方案并执行“清洁解决方案”。手动删除项目的 obj 和 bin 文件夹的内容。删除解决方案根目录中 .vs 文件夹的内容。(如果文件被锁定,请关闭 Visual Studio。)最后一步似乎是重要的部分。
打开App,查看更多内容
随时随地看视频慕课网APP