共用方式為


單元測試

跨平臺應用程式應該經過測試,因為它們會在真實世界中用來改善其品質、可靠性和效能。 許多類型的測試皆應在應用程式上執行,包括單元測試、整合測試和使用者介面測試。 單元測試是最常見的形式,對於建置高品質的應用程序至關重要。

單元測試會採用應用程式的小型單元,通常是方法,將它與程式代碼的其餘部分隔離,並確認其行為如預期般。 其目標是檢查每個功能單位是否正常執行,使錯誤不至於傳播到整個應用程式。 偵測所發生的 Bug 比在次要失敗點間接觀察 Bug 的效果更有效率。

單元測試通常應該使用arrange-act-assert模式:

Step 描述
排列 初始化 物件,並設定傳遞給受測方法的數據值。
採取行動 使用必要的自變數叫用受測方法。
Assert 確認受測方法的動作如預期般運作。

此模式可確保單元測試是可讀取、自我描述和一致的。

當單元測試是軟體開發工作流程不可或缺的一部分時,單元測試對程式代碼質量的影響最大。 單元測試可作為應用程式的設計檔和功能規格。 一旦方法撰寫完畢,就應該撰寫單元測試,以驗證回應標準、界限和不正確輸入資料案例的方法行為,並檢查程式碼所做的任何明確或隱含假設。 或者,在測試驅動開發中,也可以在程式碼之前撰寫單元測試。

重要

單元測試可有效解決迴歸。 也就是說,功能在過去運作正常,但卻因錯誤更新而受到干擾。

xUnit 是 .NET MAUI 應用程式的建議測試架構。

將 xUnit 測試新增至 .NET MAUI 解決方案

若要將 xUnit 測試新增至 .NET MAUI 解決方案,請執行下列其中一項:

  • 使用 Visual Studio 將新的 xUnit 測試專案 新增至您的方案。

    OR

  • 使用 .NET CLI 建立新的 xUnit 測試專案,並將其新增至您的解決方案。 如需詳細資訊,請參閱 使用 dotnet test 和 xUnit 在 .NET 中對 C# 進行單元測試。

xUnit 測試項目的項目檔 (.csproj) 將類似下列範例:

<Project Sdk="Microsoft.NET.Sdk">

  <PropertyGroup>
    <TargetFramework>net8.0</TargetFramework>
    <ImplicitUsings>enable</ImplicitUsings>
    <Nullable>enable</Nullable>

    <IsPackable>false</IsPackable>
    <IsTestProject>true</IsTestProject>
  </PropertyGroup>

  <ItemGroup>
    <PackageReference Include="coverlet.collector" Version="6.0.0" />
    <PackageReference Include="Microsoft.NET.Test.Sdk" Version="17.8.0" />
    <PackageReference Include="xunit" Version="2.5.3" />
    <PackageReference Include="xunit.runner.visualstudio" Version="2.5.3" />
  </ItemGroup>

  <ItemGroup>
    <Using Include="Xunit" />
  </ItemGroup>

</Project>

$(TargetFramework) build 屬性會指定測試專案的目標架構。 這會是計算機上安裝的最新版本 .NET。

套件 xunit 會引進包含測試架構本身的子套件,以及偵測單元測試常見問題的 Roslyn 分析器。 和 xunit.runner.visualstudioMicrosoft.NET.Test.Sdk 套件必須在 Visual Studio 中以及命令 dotnet test 中執行單元測試。 套件 coverlet.collector 允許收集程式代碼涵蓋範圍。 如果您不想要收集程式代碼涵蓋範圍,您可以移除此套件參考。 如需單元測試之程式代碼涵蓋範圍的詳細資訊,請參閱 使用程式碼涵蓋範圍進行單元測試

建構應用程式以進行單元測試的主要方法有兩種:

  1. 您將進行單元測試的程式代碼位於 .NET MAUI 類別庫專案中。
  2. 您將進行單元測試的程式代碼位於 .NET MAUI 應用程式專案中。

每個方法都需要特定的設定。

設定用於單元測試的 .NET MAUI 類別庫專案

使用此方法時,您想要進行單元測試的程式代碼位於 .NET MAUI 類別庫專案中,而 .NET MAUI 應用程式專案會取用。 若要針對 .NET MAUI 類別庫撰寫單元測試,您必須更新專案所使用的目標架構。 這可以藉由將 xUnit 測試項目檔 (.csproj) 的 $(TargetFramework) build 屬性的值新增至 $(TargetFrameworks) .NET MAUI 類別庫專案檔中的組建屬性來達成:

<TargetFrameworks>net8.0;net8.0-android;net8.0-ios;net8.0-maccatalyst</TargetFrameworks>

在此範例中,已將的值 net8.0 新增至 $(TargetFrameworks) .NET MAUI 類別庫項目檔中的 build 屬性。

然後,您必須從 xUnit 測試專案新增 .NET MAUI 類別庫項目的參考。

設定用於單元測試的 .NET MAUI 應用程式專案

使用此方法時,您想要進行單元測試的程式代碼位於 .NET MAUI 應用程式專案中。 若要針對 .NET MAUI 應用程式專案撰寫單元測試,您必須更新專案所使用的目標架構。 這可以藉由將 xUnit 測試項目檔 (.csproj) 的$(TargetFramework)組建屬性的值新增至 $(TargetFrameworks) .NET MAUI 應用程式專案檔中的組建屬性來達成:

<TargetFrameworks>net8.0;net8.0-android;net8.0-ios;net8.0-maccatalyst</TargetFrameworks>

在此範例中,已將的值 net8.0 新增至 $(TargetFrameworks) .NET MAUI 應用程式項目檔中的組建屬性。

您也必須修改 .NET MAUI 應用程式專案,使其不會輸出 xUnit 測試專案所使用之目標架構的可執行檔。 將條件新增至 $(OutputType) .NET MAUI 應用程式項目檔中的組建屬性,即可達成此目的:

<OutputType Condition="'$(TargetFramework)' != 'net8.0'">Exe</OutputType>

在此範例中,.NET MAUI 應用程式專案只有在目標架構不是 net8.0時才會產生可執行檔。

然後,您必須從 xUnit 測試專案新增 .NET MAUI 應用程式項目的參考。

撰寫單元測試

xUnit 支援兩種不同類型的單元測試:

測試類型 屬性 描述
事實 Fact 一律為 true 的測試,其會測試非變異的條件。
理論 Theory 僅特定資料集才為 true 的測試。

單元測試應該放在 xUnit 測試專案中,並以 或 [Theory] 屬性裝飾[Fact]。 下列範例顯示使用 屬性的 [Fact] 單元測試:

namespace MyUnitTests
{
    public class MyTests
    {
        [Fact]
        public void PassingTest()
        {
            Assert.AreEqual(4, 2+2);
        }

        [Fact]
        public void FailingTest()
        {
            Assert.AreEqual(5, 2+2);
        }
    }
}

在此範例中,測試代表故意通過和失敗的測試。

下列範例顯示使用 屬性的 [Theory] 單元測試:

namespace MyUnitTests
{
    public class MyTests
    {
        [Theory]
        [InlineData(3)]
        [InlineData(4)]
        [InlineData(5)]
        public void MyTheoryTest(int value)
        {
            Assert.True(value % 2 == 1);
        }
    }
}

在此範例中,即使只有一個測試方法,但實際上有三個測試,因為理論會針對每個數據項執行一次。

提示

使用每個單元測試來測試一項作業。 測試的複雜度擴大,會使該測試的驗證更加困難。 藉由將單元測試限制為單一考慮,您可以確保測試可重複、隔離且運行時間較短。 如需詳細資訊,請參閱 單元測試最佳做法

執行單元測試

單元測試可以在 Visual Studio 中的 [測試總管] 中執行,或使用 命令來執行 dotnet test 。 如需測試總管的相關信息,請參閱 使用測試總管執行單元測試。 如需命令的相關信息 dotnet test ,請參閱 使用 dotnet test 和 xUnitdotnet test 在 .NET 中對 C# 進行單元測試

使用裝置執行器執行單元測試

單元測試也可以使用裝置執行器在裝置上執行。 裝置執行器是測試執行器應用程式,可提供可視化執行器殼層,以及使用 XHarness 從 CLI 執行的一些攔截。 如需詳細資訊,請參閱測試裝置執行器Wiki的檔

另請參閱