MSTest SDK 概觀
MSTest.Sdk 是用來建置 MSTest 應用程式的 MSBuild 專案 SDK。 雖然沒有此 SDK 仍可建置 MSTest 應用程式,但 MSTest SDK 是:
- 目的是針對 MSTest 測試提供一流的體驗。
- 大部分使用者的建議目標。
- 能輕鬆地為其他使用者進行設定。
MSTest SDK 會使用 MSTest 執行器探索並執行測試。
只要更新專案中 MSTest.Sdk
節點的 Sdk
屬性,即可在專案中啟用 Project
:
<Project Sdk="MSTest.Sdk/3.6.3">
<PropertyGroup>
<TargetFramework>net8.0</TargetFramework>
</PropertyGroup>
<!-- references to the code to test -->
</Project>
注意
/3.6.3
會以範例的形式提供,而且可以取代為任何較新版本。
為了簡化版本管理,建議使用 global.json 檔案在解決方案層級設定 SDK 版本。 例如,您的專案檔看起來會像這樣:
<Project Sdk="MSTest.Sdk">
<PropertyGroup>
<TargetFramework>net8.0</TargetFramework>
</PropertyGroup>
<!-- references to the code to test -->
</Project>
接著,在 MSTest.Sdk
檔案中指定 版本,如下所示:
{
"msbuild-sdks": {
"MSTest.Sdk": "3.6.3"
}
}
如需詳細資訊,請參閱使用 MSBuild 專案 SDK。
當您 build
專案時,都會使用專案所設定的標準 NuGet 工作流程來還原並安裝所有必要元件。
您不需要建置任何其他項目來執行測試,而且您可以使用dotnet test
所使用的相同工具 (例如, 或 Visual Studio)。
重要
透過切換到 MSTest.Sdk
,您可以選擇使用 MSTest 執行器,包括 dotnet test。 這需要修改 CI 和本機 CLI 呼叫,並且會影響 .runsettings 的可用項目。 您可以改為切換MSTest.Sdk
來使用 ,並仍然保留舊版整合和工具。
選取執行器
預設情況下,MSTest SDK 依賴於 MSTest 執行器,但您可以透過新增屬性 來切換到 <UseVSTest>true</UseVSTest>
。
擴充 MSTest 執行器
您可以透過一組 MSTest runner
來自訂 體驗。 為了簡化和改善這個體驗,MSTest SDK 引入了兩個功能:
MSTest 執行器設定檔
設定檔的概念可讓您選取將套用至測試專案的一組預設設定和延伸模組。
您可以使用屬性 TestingExtensionsProfile
將設定檔設定為下列三個設定檔之一:
None
- 不未啟用任何延伸模組。Default
- 啟用此 MSTest.SDK 版本的建議延伸模組。 當屬性未明確設定時,這會是預設值。開啟下列延伸模組:
AllMicrosoft
- 啟用 Microsoft 隨附的所有延伸模組 (包括具有限制性授權的延伸模組)。開啟下列延伸模組:
以下是使用 None
設定檔的完整範例:
<Project Sdk="MSTest.Sdk/3.6.3">
<PropertyGroup>
<TargetFramework>net8.0</TargetFramework>
<TestingExtensionsProfile>None</TestingExtensionsProfile>
</PropertyGroup>
<!-- references to the code to test -->
</Project>
擴充功能/配置檔 | 沒有 | 預設 | AllMicrosoft |
---|---|---|---|
程式代碼涵蓋範圍 | ✔️ | ✔️ | |
損毀傾印 | ✔️ | ||
假貨 | ✔️ (MSTest.Sdk 3.7.0+) | ||
暫停傾倒 | ✔️ | ||
熱重載 | ✔️ | ||
重試 | ✔️ | ||
Trx | ✔️ | ✔️ |
啟用或停用延伸模組
可以透過 MSBuild 屬性使用模式 Enable[NugetPackageNameWithoutDots]
來啟用和停用延伸模組。
例如,若要啟用損毀傾印延伸模組 (NuGet 套件 Microsoft.Testing.Extensions.CrashDump),您可以使用下列屬性 EnableMicrosoftTestingExtensionsCrashDump
設定為 true
:
<Project Sdk="MSTest.Sdk/3.6.3">
<PropertyGroup>
<TargetFramework>net8.0</TargetFramework>
<EnableMicrosoftTestingExtensionsCrashDump>true</EnableMicrosoftTestingExtensionsCrashDump>
</PropertyGroup>
<!-- references to the code to test -->
</Project>
有關所有可用擴充功能的清單,請參閱 Microsoft.Testing.Platform 擴充功能。
警告
請務必檢查每個擴充功能的授權條款,因為它們可能會有所不同。
啟用和停用的延伸模組會結合所選延伸模組設定檔所提供的延伸模組。
這個屬性模式可以用來在隱式 Default
設定檔 (如先前的 CrashDumpExtension 範例所示) 之上啟用額外的擴充功能。
你也可以停用來自所選設定檔的擴充功能。 例如,透過設定 MS Code Coverage
來停用 <EnableMicrosoftTestingExtensionsCodeCoverage>false</EnableMicrosoftTestingExtensionsCodeCoverage>
擴充功能:
<Project Sdk="MSTest.Sdk/3.6.3">
<PropertyGroup>
<TargetFramework>net8.0</TargetFramework>
<EnableMicrosoftTestingExtensionsCodeCoverage>false</EnableMicrosoftTestingExtensionsCodeCoverage>
</PropertyGroup>
<!-- references to the code to test -->
</Project>
功能
除了選擇執行器和執行器專用擴充功能之外,MSTest.Sdk
還提供額外的功能,以簡化和提升測試體驗。
使用 .NET Aspire 進行測試
.NET Aspire 是一個固定的雲端就緒堆疊,可用於建置可觀察且生產就緒的分散式應用程式。 .NET Aspire 會透過處理特定雲端原生考量的 NuGet 套件集合來傳遞。 如需詳細資訊,請參閱 .NET Aspire 文件。
注意
此功能可從 MSTest.Sdk 3.4.0 取得
透過將屬性 EnableAspireTesting
設為 true
,您可以引入所有測試 using
和 Aspire
所需的依賴項和預設 MSTest
指令。
<Project Sdk="MSTest.Sdk/3.4.0">
<PropertyGroup>
<TargetFramework>net8.0</TargetFramework>
<EnableAspireTesting>true</EnableAspireTesting>
</PropertyGroup>
<!-- references to the code to test -->
</Project>
使用 Playwright 進行測試
Playwright 可針對新式 Web 應用程式啟用可靠的端對端測試。 如需詳細資訊,請參閱官方 Playwright 文件。
注意
此功能可從 MSTest.Sdk 3.4.0 取得
透過將屬性 EnablePlaywright
設為 true
,您可以引入所有測試 using
和 Playwright
所需的依賴項和預設 MSTest
指令。
<Project Sdk="MSTest.Sdk/3.4.0">
<PropertyGroup>
<TargetFramework>net8.0</TargetFramework>
<EnablePlaywright>true</EnablePlaywright>
</PropertyGroup>
<!-- references to the code to test -->
</Project>
移轉到 MSTest SDK
請考慮移轉至 MSTest SDK 所需的下列步驟。
更新您的專案
將現有的 MSTest 測試專案移轉至 MSTest SDK 時,請先將測試專案頂端的 Sdk="Microsoft.NET.Sdk"
輸入取代為 Sdk="MSTest.Sdk"
- Sdk="Microsoft.NET.Sdk"
+ Sdk="MSTest.Sdk"
將版本新增至 global.json
:
{
"msbuild-sdks": {
"MSTest.Sdk": "3.6.3"
}
}
然後,您便可以開始簡化專案。
移除預設屬性:
- <EnableMSTestRunner>true</EnableMSTestRunner>
- <OutputType>Exe</OutputType>
- <IsPackable>false</IsPackable>
- <IsTestProject>true</IsTestProject>
移除預設套件參考:
- <PackageReference Include="MSTest"
- <PackageReference Include="MSTest.TestFramework"
- <PackageReference Include="MSTest.TestAdapter"
- <PackageReference Include="MSTest.Analyzers"
- <PackageReference Include="Microsoft.NET.Test.Sdk"
最後,根據您使用的延伸模組設定檔,您也可以移除部分 Microsoft.Testing.Extensions.*
套件。
更新您的 CI
一旦您更新了專案,如果您使用的是 MSTest runner
(預設),並且依賴 dotnet test
來執行測試,則必須更新 CI 設定。 如需更多資訊並想了解所有必要的變更,請參閱「dotnet test 整合」。
以下是在 Azure DevOps 中使用 DotNetCoreCLI
工作時的範例更新:
\- task: DotNetCoreCLI@2
inputs:
command: 'test'
projects: '**/**.sln'
- arguments: '--configuration Release'
+ arguments: '--configuration Release -p:TestingPlatformCommandLineArguments="--report-trx --results-directory $(Agent.TempDirectory) --coverage"'
已知限制
NuGet 提供的 MSBuild SDK(包括 MSTest.Sdk)在更新其版本方面具有有限的工具支援,這表示用於管理 NuGet 套件的一般 NuGet 更新和 Visual Studio UI 無法如預期般運作。 如需詳細資訊,請參閱此問題:NuGet#13127。
注意
此限制並非專屬於 MSTest SDK,而是任何 NuGet 提供的 MSBuild SDK。
Dependabot 會處理更新 global.json
檔案中的版本,但您必須 手動更新項目檔中的版本。