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)。我现在已经在两台机器上验证了上述行为。
要复制:
- 打开 VS 2015 企业版
- 文件 -> 新建项目
- 在模板 -> Visual C# -> 云下,选择 "ASP.net Web Application"
- Select 命名位置并单击确定,在下面的屏幕上选择 "Azure API App (Preview)" 并单击确定。
- 加载项目时,导航到 "ValuesController"。
- 在任一默认 Get() 方法内单击鼠标右键,然后 select "Run IntelliTest" 如下所示
- 从 "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)}";
}
}
}
当使用 "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)。我现在已经在两台机器上验证了上述行为。
要复制:
- 打开 VS 2015 企业版
- 文件 -> 新建项目
- 在模板 -> Visual C# -> 云下,选择 "ASP.net Web Application"
- Select 命名位置并单击确定,在下面的屏幕上选择 "Azure API App (Preview)" 并单击确定。
- 加载项目时,导航到 "ValuesController"。
- 在任一默认 Get() 方法内单击鼠标右键,然后 select "Run IntelliTest" 如下所示
- 从 "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)}";
}
}
}