实验性 Microsoft.Testing.Platform.AI 包为测试框架和 MTP 扩展定义了与提供程序无关的 AI 抽象。 该包与 Microsoft.Extensions.AI 集成,因此扩展可以请求一个 IChatClient,而无需依赖特定的模型提供程序。
Important
AI API 使用 TPEXP 诊断 ID,可以在将来的版本中进行更改。 包为扩展提供基础结构;它们不会自行将 AI 行为添加到测试套件。
使用 AI 编码工具测试工作流
本文中的包允许 MTP 扩展在测试运行期间调用 AI 模型。 若要使用 AI 编码助手在存储库中创建、分析或迁移测试,请改用特选.NET代理技能。
根据目标选择工作流:
| 目标 | 技能或代理 |
|---|---|
| 创建或扩展测试 | 使用插件中的dotnet-test技能。code-testing-agent 技能研究代码库、规划工作、实施测试并验证更改。 |
| 运行或排查测试 | 使用run-tests技能来执行测试或诊断测试执行问题,而无需更改测试代码。 |
| 审计测试质量 | 使用 test-quality-auditor 代理 进行全面评估,或从 dotnet-test 技能目录 中调用特定技能,以处理断言、覆盖率、测试缺口或测试异味。 |
| 提高可测试性 | 使用 testability-migration 代理 查找静态依赖项并引入可测试的抽象。 |
| 迁移测试框架或平台 | 使用来自test-migration插件的dotnet-test-migration代理。 代理会检测当前设置,并选择适当的迁移技能。 |
有关安装步骤和支持的编码代理,请参阅.NET代理技能存储库。 将dotnet-test-migration与dotnet-test一起安装,因为迁移工作流会复用其平台检测和测试验证能力。
选择软件包
在创作使用聊天客户端的扩展时添加抽象包。 将提供程序包添加到托管扩展的测试应用程序:
dotnet add package Microsoft.Testing.Platform.AI
dotnet add package Microsoft.Testing.Extensions.AzureFoundry
Microsoft.Testing.Extensions.AzureFoundry是Microsoft提供的引用提供程序。 它通过 Azure AI Foundry 创建 Azure OpenAI 聊天客户端。
配置Azure AI Foundry
设置以下环境变量:
| Variable | 必需 | 说明 |
|---|---|---|
AZURE_OPENAI_ENDPOINT |
是的 | Azure OpenAI 资源终结点,如 https://my-resource.openai.azure.com。 |
AZURE_OPENAI_DEPLOYMENT_NAME |
是的 | 模型部署名称。 |
AZURE_OPENAI_API_KEY |
Conditional | 资源 API 密钥。 除非您在代码中注册了 TokenCredential,否则设置此值。 |
若要使凭据不受源代码管理,请通过本地环境或受保护的 CI 机密存储提供这些值。
注册提供程序
禁用生成的 MTP 入口点,并在您的自定义 Main 方法中注册提供程序。 对于 API 密钥身份验证,请调用:
#pragma warning disable TPEXP
builder.AddAzureOpenAIChatClientProvider();
#pragma warning restore TPEXP
对于 Microsoft Entra ID 或托管标识,引用 Azure.Identity 包并传递凭据:
using Azure.Identity;
#pragma warning disable TPEXP
builder.AddAzureOpenAIChatClientProvider(new DefaultAzureCredential());
#pragma warning restore TPEXP
当设置了 AZURE_OPENAI_API_KEY 时,提供程序会优先使用 API 密钥,而不是所提供的凭据。 当第一个聊天请求运行时,凭据解析和身份验证将发生,因此配置错误可能不会在提供程序注册期间显示。
使用聊天客户端
实现 IChatClientProvider 以集成另一个 AI 提供程序。 MTP 扩展可以从其 IServiceProvider中检索已注册的聊天客户端:
IChatClient? client =
await serviceProvider.GetChatClientAsync(cancellationToken);
未注册任何可用的提供程序时,该调用返回 null。 在扩展将测试数据发送到模型之前,请记录它发送的数据,并应用该数据的隐私、安全性和保留要求。