共用方式為


設定 MSTest

MSTest (Microsoft 測試架構) 是適用於 .NET 應用程式的測試架構。 它可讓您撰寫和執行測試,並提供與 Visual Studio 和 Visual Studio Code 測試總管、.NET CLI 和許多 CI 管線整合的測試套件。

MSTest 是完全支援、開放原始碼且跨平台的測試架構,可搭配 GitHub 上裝載且支援的所有 .NET 目標 (.NET Framework、.NET Core、.NET、UWP、WinUI 等) 運作。

Runsettings

.runsettings 檔案可用來設定單元測試的執行方式。 若要深入了解與平台相關的 runsettings 和組態,請參閱 VSTest runsettings 文件MSTest 執行器 runsettings 文件

MSTest 元素

下列 runsettings 項目可讓您設定 MSTest 的行為方式。

組態 預設 價值觀
AssemblyCleanupTimeout 0 以全域方式指定要套用於每個組件清除方法執行個體的逾時。 在組件清除方法上指定的 [Timeout] 屬性會覆蓋全域設定的逾時。
AssemblyInitializeTimeout 0 以全域方式指定要套用於每個組件初始化方法實例的超時。 在組件初始化方法上指定的 [Timeout] 屬性會覆寫全域逾時設置。
AssemblyResolution 假的 您可以在求解及執行單元測試時,指定額外組件的路徑。 例如,您可以針對與測試組件位於不同目錄的相依性組件,使用這些路徑。 若要指定路徑,請使用目錄路徑項目。 路徑可以包括環境變數。

<AssemblyResolution> <Directory path="D:\myfolder\bin\" includeSubDirectories="false"/> </AssemblyResolution>

此功能只有在使用 .NET Framework 目標時才會套用。
CaptureTraceOutput true 擷取來自將與目前執行中的測試相關聯的 Console.Write*Trace.Write*Debug.Write* API 的文字訊息。
ClassCleanupLifecycle 課程結束 如果您想要在組件結尾進行類別清除,請將其設定為 EndOfAssembly。 (從 MSTest v4 開始不再支援,因為 EndOfClass 是預設且唯一的 ClassCleanup 行為)
ClassCleanupTimeout 0 全域指定逾時,適用於每個類別的清除方法實例。 在類別的清理方法中指定的 [Timeout] 屬性會覆寫全域超時設定。
ClassInitializeTimeout 0 以全域範圍指定逾時設定,以套用於每個類別初始化方法的實例。 在類別初始化方法中指定的 [Timeout] 屬性會覆蓋全域逾時設定。
ConsiderFixturesAsSpecialTests false 如果要在 Visual Studio 和 Visual Studio Code AssemblyInitializeAssemblyCleanup 記錄中將 ClassInitializeClassCleanupTest Explorer 顯示為個別項目,請將此值設定為 true
DeleteDeploymentDirectoryAfterTestRunIsComplete true 若要在測試回合之後保留部署目錄,請將此值設定為 false
部署已啟用 true 如果您將此值設定為 false,就不會將您在測試方法中所指定的部署項目複製到部署目錄中。
DeployTestSourceDependencies 真實 一個值,指出是否要部署測試源參照。
啟用其他程序集的基類測試方法 真實 一個值,表示是否啟用從不同於繼承測試類別所在組件的基底類別中探索測試方法。
ForcedLegacyMode 錯誤 舊版 Visual Studio 中的 MSTest 配接器已進行過最佳化,因此更快速且更具延展性。 某些行為 (例如測試執行順序) 可能與舊版 Visual Studio 稍有出入。 將此值設定為 true,以使用較舊的測試配接器。

例如,如果您為單元測試指定 app.config 檔案,則可以使用此設定。

建議您考慮重構測試,以便使用較新的配接器。
MapInconclusiveToFailed 如果測試完成後狀態不明確,則會在 [測試總管] 中對應至略過狀態。 如果您要讓結果不明的測試顯示為 [失敗],請將此值設定為 true
將無法運行的映射標記為失敗 true 一個值,指出無法執行的結果是否對應至失敗的測試。
按類別中的名稱排序測試 如果您要在 [測試總管] 和命令列中依測試名稱執行測試,請將此值設定為 true
平行處理 用來設定平行處理設定:

背景工作角色:要用於平行處理的執行緒/背景工作角色數目,預設為目前電腦上的處理器數目

範圍:平行處理的範圍。 您可以將其設定為 MethodLevel。 根據預設,它是 ClassLevel

<Parallelize><Workers>32</Workers><Scope>MethodLevel</Scope></Parallelize>
設定檔 您可以指定與此處的 MS 測試配接器一起使用的測試設定檔。 您也可以從設定功能表指定測試設定檔。

如果您指定這個值,也必須將 [ForcedlegacyMode] 設定為 [true]

<ForcedLegacyMode>true</ForcedLegacyMode>
TestCleanupTimeout 0 以全域方式指定要套用於每個測試清理方法的超時時間。 在測試清除方法上指定的 [Timeout] 屬性將覆蓋全域逾時。
TestInitializeTimeout 0 以全域方式指定要套用於每個測試初始化方法執行個體的逾時。 在測試初始化方法上指定的 [Timeout] 屬性會覆寫整體逾時設定。
TestTimeout 0 取得指定的全域測試案例超時。
TreatClassAndAssemblyCleanupWarningsAsErrors 若要將類別清除中的失敗視為錯誤,請將此值設定為 true
TreatDiscoveryWarningsAsErrors 若要將測試探索警告報告為錯誤,請將此值設定為 [true]

TestRunParameter 元素

<TestRunParameters>
    <Parameter name="webAppUrl" value="http://localhost" />
</TestRunParameters>

測試回合參數提供方法,定義可供在執行階段的測試使用的變數和值。 使用 MSTest TestContext.Properties 屬性存取參數:

private string _appUrl;
public TestContext TestContext { get; set; }

[TestMethod]
public void HomePageTest()
{
    string _appUrl = TestContext.Properties["webAppUrl"];
}

若要使用測試回合參數,請將公用 TestContext 屬性新增至您的測試類別。

.runsettings 檔案範例

下列 XML 顯示一般 .runsettings 檔案的內容。 複製此程式碼,並根據需求編輯。

檔案的每個項目都有預設值,因此為選擇性。

<?xml version="1.0" encoding="utf-8"?>
<RunSettings>

  <!-- Parameters used by tests at run time -->
  <TestRunParameters>
    <Parameter name="webAppUrl" value="http://localhost" />
    <Parameter name="webAppUserName" value="Admin" />
    <Parameter name="webAppPassword" value="Password" />
  </TestRunParameters>

  <!-- MSTest -->
  <MSTest>
    <MapInconclusiveToFailed>True</MapInconclusiveToFailed>
    <CaptureTraceOutput>false</CaptureTraceOutput>
    <DeleteDeploymentDirectoryAfterTestRunIsComplete>False</DeleteDeploymentDirectoryAfterTestRunIsComplete>
    <DeploymentEnabled>False</DeploymentEnabled>
    <ConsiderFixturesAsSpecialTests>False</ConsiderFixturesAsSpecialTests>
    <AssemblyResolution>
      <Directory path="D:\myfolder\bin\" includeSubDirectories="false"/>
    </AssemblyResolution>
  </MSTest>

</RunSettings>

testconfig.json

使用 MSTest 執行測試時,您可以使用 testconfig.json 檔案來設定測試執行器的行為。 testconfig.json 檔案是 JSON 檔案,其中包含測試執行器的組態設定。 檔案是用來設定測試執行器和測試執行環境。 如需詳細資訊,請參閱 Microsoft.Testing.Platform testconfig.json 檔案

從 MSTest 3.7 開始,您也可以在相同的組態檔中設定 MSTest 執行。 下列各節說明您可以在 testconfig.json 檔案中使用的設定。

MSTest 元素

MSTest 設定會依下列各節中所述的功能分組。

進入 預設 描述
orderTestsByNameInClass 如果您要在 [測試總管] 和命令列中依測試名稱執行測試,請將此值設定為 true
啟用來自其他程序集的基類測試方法 true 一個值,指出是否要從繼承測試類別的不同組件中,啟用從基底類別探索測試方法。
classCleanupLifecycle 組裝完成 如果您要在類別結尾進行類別清除,請將它設定為 EndOfClass

assemblyResolution 設定

本節中的所有設定都屬於 assemblyResolution 元素。

進入 預設 描述
路徑 沒有 您可以在求解及執行單元測試時,指定額外組件的路徑。 例如,您可以針對與測試組件位於不同目錄的相依性組件,使用這些路徑。 您可以為圖形 { "path": "...", "includeSubDirectories": "true/false" }指定路徑。

例:

{
  "mstest": {
    "assemblyResolution": {
        { "path": "...", "includeSubDirectories": "true/false" }
    }
  }
}

deployment 設定

本節中的所有設定都屬於 deployment 元素。

進入 預設 描述
deleteDeploymentDirectoryAfterTestRunIsComplete true 若要在測試回合之後保留部署目錄,請將此值設定為 false
deployTestSourceDependencies true 指示是否要部署測試來源的參考資料。
啟用 真實 如果您將此值設定為 false,就不會將您在測試方法中所指定的部署項目複製到部署目錄中。

例:

{
  "mstest": {
    "deployment": {
        "deleteDeploymentDirectoryAfterTestRunIsComplete": true,
        "deployTestSourceDependencies": true,
        "enabled": true
    }
  }
}

output 設定

本節中的所有設定都屬於 output 元素。

進入 預設 描述
captureTrace true 擷取來自將與目前執行中的測試相關聯的 Console.Write*Trace.Write*Debug.Write* API 的文字訊息。

例:

{
  "mstest": {
    "output": {
        "captureTrace": false
    }
  }
}

parallelism 設定

本節中的所有設定都屬於 parallelism 元素。

進入 預設 描述
啟用 錯誤 啟用測試平行處理。
範圍 類別 平行處理的範圍。 您可以設定為 method。 默認的 class會對應至循序執行指定類別的所有測試,但平行執行多個類別。
工人 0 要用於平行處理的線程/工作執行緒數量。 預設值會對應至目前電腦上的處理器數目。

例:

{
  "mstest": {
    "parallelism": {
        "enabled": true,
        "scope": "method",
        "workers": 32
    }
  }
}

execution 設定

本節中的所有設定都屬於 execution 元素。

進入 預設 描述
considerEmptyDataSourceAsInconclusive 假的 當設定為 true時,空的數據源會被視為不確定。
將固定裝置視為特殊測試 錯誤 若要在 Visual Studio 和 Visual Studio Code Test Explorer.trx 記錄檔中,將 AssemblyInitializeAssemblyCleanupClassInitializeClassCleanup 顯示為個別專案,請將此值設定為 true
將不確定映射為失敗 錯誤 如果測試完成,但狀態結果不明,則在 測試總管 中對應至已略過狀態。 如果您要讓結果不明的測試顯示為 [失敗],請將此值設定為 true
mapNotRunnableToFailed true 一個值,指出無法執行的結果是否對應至失敗的測試。
treatClassAndAssemblyCleanupWarningsAsErrors (視類別與組件清理警告為錯誤) 若要將類別清除中的失敗視為錯誤,請將此值設定為 true
將探索警告視為錯誤 錯誤 若要將測試探索警告報告為錯誤,請將此值設定為 [true]

例:

{
  "mstest": {
    "execution": {
        "considerEmptyDataSourceAsInconclusive": false,
        "considerFixturesAsSpecialTests": false,
        "mapInconclusiveToFailed": true,
        "mapNotRunnableToFailed": true,
        "treatClassAndAssemblyCleanupWarningsAsErrors": false,
        "treatDiscoveryWarningsAsErrors": false
    }
  }
}

timeout 設定

本節中的所有設定都屬於 timeout 元素。

進入 預設 描述
組裝清理 0 指定全域性的逾時設定,以應用於每個組件清理方法的實例。
組件初始化 0 以全域方式指定要套用於每個組件初始化方法執行個體的逾時。
classCleanup 0 以全域方式指定要套用於每個類別清除方法實例的超時時間。
classInitialize 0 以全域方式指定要套用於每個類別初始化方法執行個體的逾時。
測試 0 全球指定測試逾時時間。
testCleanup 0 以全域方式指定要套用於每個測試清除方法實例的逾時。
testInitialize 0 以全域方式指定要套用於每個測試初始化方法的實例的超時設定。
useCooperativeCancellation (協作取消功能) 當設定為 true時,如果逾時,MSTest 只會觸發 CancellationToken 的取消,但不會停止觀察該方法。 此行為效能更佳,但依賴用戶確保令牌正確地傳遞經過所有路徑。

注意

在方法上設定的 [Timeout] 屬性將會覆寫預設的全域逾時設定。 例如,在標示為 [AssemblyCleanup] 的方法上,[Timeout(1000)] 將覆蓋全域性的 assemblyCleanup 超時設定。

例:

{
  "mstest": {
    "timeout": {
        "assemblyCleanup": 0,
        "assemblyInitialize": 0,
        "classCleanup": 0,
        "classInitialize": 0,
        "test": 0,
        "testCleanup": 0,
        "testInitialize": 0,
        "useCooperativeCancellation": false
    }
  }
}

範例 testconfig.json 檔案

下列 JSON 顯示一般 .testconfig.json 檔案的內容。 複製此程式碼,並根據需求編輯。

檔案的每個項目都有預設值,因此為選擇性。

{
  "platformOptions": {
  },
  "mstest": {
    "execution": {
        "mapInconclusiveToFailed" : true,
        "disableAppDomain": true,
        "considerFixturesAsSpecialTests" : false,
    },
    "parallelism" : {
        "enabled": true,
        "scope": "method",
    },
    "output": {
        "captureTrace": false
    }
  }
}