實驗性的 Microsoft.Testing.Platform.AI 套件定義了測試框架與 MTP 擴充的提供者中立 AI 抽象。 此套件與 Microsoft.Extensions.AI 整合,因此擴充功能可請求 IChatClient,而不需依賴特定的模型提供者。
Important
AI API 使用 TPEXP 診斷 ID,且可能會在未來版本中變更。 這些套件為延伸線提供基礎設施;它們不會自己把 AI 行為加入測試套件。
使用AI編碼工具進行測試工作流程
本文中的套件讓 MTP 擴充功能在測試時能呼叫 AI 模型。 若要使用 AI 編碼助理來建立、分析或遷移資料庫中的測試,請改用精選的 .NET 代理技能。
根據你的目標選擇工作流程:
| 目標 | 技能或代理人 |
|---|---|
| 建立或擴充測試 | 使用code-testing-agent插件裡的dotnet-test技能。 這項技能會研究程式碼庫、規劃工作、實作測試並驗證變更。 |
| 執行或排除故障測試 | 使用此 run-tests 技能 執行測試或診斷測試執行,且不更改測試程式碼。 |
| 稽核測試品質 | 你可以使用 test-quality-auditor 代理程式 進行廣泛評估,或從 dotnet-test 技能目錄 中叫用特定技能,以檢查斷言、覆蓋範圍、測試缺口或測試異味。 |
| 提升可測試性 | 使用 testability-migration 代理 尋找靜態相依關係並引入可測試的抽象。 |
| 遷移測試框架或平台 | 使用來自test-migration外掛程式的dotnet-test-migration代理程式。 代理會偵測目前的設定並選擇適當的遷移技能。 |
關於安裝步驟及支援的編碼代理程式,請參閱 .NET 代理技能資料庫。 將 dotnet-test 與 dotnet-test-migration 一併安裝,因為遷移工作流程會重複使用其平台偵測和測試驗證功能。
選擇包裹
當您撰寫使用聊天用戶端的擴充功能時,請加入 Abstractions 套件。 在承載擴充功能的測試應用程式中加入一個提供者套件:
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 | Required | Description |
|---|---|---|
AZURE_OPENAI_ENDPOINT |
Yes | Azure OpenAI 資源端點,例如 https://my-resource.openai.azure.com. |
AZURE_OPENAI_DEPLOYMENT_NAME |
Yes | 模型部署名稱。 |
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。 在擴充套件傳送測試資料給模型之前,先記錄它傳送的資料內容,並套用該資料的隱私、安全與保存要求。