Visual Studio Azure API 应用程序上的 2015 IntelliTest 错误?

Visual Studio 2015 IntelliTest bug on Azure API Apps?

当使用 "Azure API App (Preview)" 模板 运行 在 default/blank ASP.net 应用程序上进行 IntelliTest 时,IntelliTest 找不到要测试的内容。我不确定这是设计使然、错误还是尚不支持。有谁知道解决方法?

IntelliTest 输出 window 显示 "monitored process exited with could not find any test to run (-1013 - 0xfffffc0b)"。我已确定项目目标为 x86。

如果我使用 "Web API" 模板,IntelliTest 会正确生成测试结果(在下面的第 4 步中选择 Web API 而不是 Azure API App)。我现在已经在两台机器上验证了上述行为。

要复制:

  1. 打开 VS 2015 企业版
  2. 文件 -> 新建项目
  3. 在模板 -> Visual C# -> 云下,选择 "ASP.net Web Application"
  4. Select 命名位置并单击确定,在下面的屏幕上选择 "Azure API App (Preview)" 并单击确定。
  5. 加载项目时,导航到 "ValuesController"。
  6. 在任一默认 Get() 方法内单击鼠标右键,然后 select "Run IntelliTest" 如下所示
  7. 从 "show output from" 下拉列表中打开输出 window 和 select "IntelliTest" 并观察上面的消息(...找不到 [=56= 的任何测试])

最终将此问题归结为 Swashbuckle 和 intelliTest 之间的某些不兼容(api 应用程序使用 Swasbuckle 为 API 生成 Swagger 文档)。

要解决,请打开 API 应用程序项目的 App_Start 文件夹中的 SwaggerConfig.cs 并删除下面继承自 IOperationFilter 的 class。这样做的缺点是没有将您的参数在 swagger 文档中连接在一起,这是我不太喜欢的东西(默认模型更适合从中读取一长串参数)。

internal class IncludeParameterNamesInOperationIdFilter : IOperationFilter
{
    public void Apply(Operation operation, SchemaRegistry schemaRegistry, ApiDescription apiDescription)
    {
        if (operation.parameters != null)
        {
            // Select the capitalized parameter names
            var parameters = operation.parameters.Select(
                p => CultureInfo.InvariantCulture.TextInfo.ToTitleCase(p.name));

            // Set the operation id to match the format "OperationByParam1AndParam2"
            operation.operationId = $"{operation.operationId}By{string.Join("And", parameters)}";
        }
    }
}