修復代碼中的bug所要付出的代碼很昂貴,開發程序中發現錯誤的時間越早,修復成本就越低,
單元測驗是在開發早期發現BUG的好方法,一些開發人員甚至遵循這樣的原則:程式員應該在撰寫代碼之前創建單元測驗,這成為測驗驅動開發(Text-Driven Development,TDD),
微軟提供了專用的單元測驗框架,名為MSTest;但是,這里將使用第三方單元測驗框架xUnit.net,
4.4.1創建需要測驗的類別庫
執行如下步驟:
(1)在Chapter04檔案夾中創建2個名為CalculatorLib和CalculatorLibUnitTests的子檔案夾,并將它們分別添加到作業區,(我因為操作失誤,從新創建了Calculator檔案夾)其他步驟一樣,添加創建2個子檔案夾,然后右鍵添加到作業區,
(2)導航到Terminal|new Terminal并選擇CalculatorLib,
(3)在終端視窗中輸入以下命令:
dotnet new classlib
(4)將名為Class1.cs的檔案重命名為Calculator.cs,
(5)修改Calculator.cs檔案以定義為Calculator類(帶有故意的錯誤吧加法寫成乘法),如果你覺得代碼比較亂Visual Studio Code下使用Ctrl+A全選,然后使用Ctrl+K和Ctrl+F組合鍵自動格式化代碼布局,如下所示:
namespace CalculatorLib;
public class Calculator
{
public double Add(double a, double b)
{
return a * b;
}
}
(6)在終端視窗中輸入以下命令:
dotnet build
(7)導航到Terminal|New Terminal并選擇CalculatorLibUnitTests,
(8)在終端視窗中輸入以下命令:
dotnet new xunit
(9)單擊名為CalculatorLibUnitTests.csproj的檔案,修改配置以添加ItemGroup部分,其他包含對CalculatorLib專案的參考,如下所示:
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
<TargetFramework>net6.0</TargetFramework>
<Nullable>enable</Nullable>
<IsPackable>false</IsPackable>
</PropertyGroup>
<ItemGroup>
<PackageReference Include="Microsoft.NET.Test.Sdk" Version="16.9.4" />
<PackageReference Include="xunit" Version="2.4.1" />
<PackageReference Include="xunit.runner.visualstudio" Version="2.4.3">
<IncludeAssets>runtime; build; native; contentfiles; analyzers; buildtransitive</IncludeAssets>
<PrivateAssets>all</PrivateAssets>
</PackageReference>
<PackageReference Include="coverlet.collector" Version="3.0.2">
<IncludeAssets>runtime; build; native; contentfiles; analyzers; buildtransitive</IncludeAssets>
<PrivateAssets>all</PrivateAssets>
</PackageReference>
</ItemGroup>
<ItemGroup>
<ProjectReference Include="..\CalculatorLib\CalculatorLib.csproj"/>
</ItemGroup>
</Project>
(10)將檔案UnitTest1.cs重命名為CalculatorUnitTests.cs
(11)在終端視窗中輸入以下命令:
dotnet build
4.4.2 撰寫單元測驗
好的單元測驗包含如下三個部分,
- Arrange:這部分為輸入輸出宣告和實體化變數,
- Act:這部分執行想要測驗的單元,在我們的例子中,這意味著呼叫要測驗的方法,
- Assert:這部分對輸出進行斷言,斷言是一種信念,如果不為真,則表示測驗失敗,例如,當計算2+2時,期望結果是4,
現在我們為Calculator類撰寫單元測驗,
(1)打開CalculatorUnitTests.cs,將類重命名為CalculatorUnitTests,匯入CalculatorLib名稱空間,然后修改CalculatorUnitTests類,使其擁有兩個測驗方法,分別計算2加2以及2加3,如下所示:
using Xunit;
using System;
using CalculatorLib;
namespace CalculatorLibUnitTests;
public class CalculatorUnitTests
{
[Fact]
public void TestAdding2And2()
{
//arrange
double a=2;
double b=2;
double expected=4;
var calc=new Calculator();
//act
double actual= calc.Add(a,b);
Assert.Equal(expected,actual);
}
[Fact]
public void TestAdding2And3()
{
//arrange
double a=2;
double b=3;
double expected=5;
var calc=new Calculator();
//act
double actual=calc.Add(a,b);
//assert
Assert.Equal(expected,actual);
}
}
4.4.3運行單元測驗
(1)在CalculatorLibUnitTest專案的終端視窗中輸入以下命令:
dotnet test
(2)請注意,輸出結果表面運行了2個測驗:一個測驗通過,另一個測驗失敗,
(3)糾正A的的方法中的乘法為加法,
(4)再次運行單元測驗,你會發現BUG修復,測驗通過了,
PS D:\LearningRecords\doc\C#\NetCoreWorkspace\Code\Calculator\CalculatorLibUnitTests> dotnet test
正在確定要還原的專案…
所有專案均是最新的,無法還原,
at CalculatorLibUnitTests.CalculatorUnitTests.TestAdding2And3() in D:\LearningRecords\doc\C#\NetCoreWorkspace\Code\Calculator\CalculatorLibUnitTests\CalculatorUnitTests.cs:line 33
失敗! - 失敗: 1,通過: 1,已跳過: 0,總計: 2,持續時間: 2 ms - CalculatorLibUnitTests.dll (net6.0)
PS D:\LearningRecords\doc\C#\NetCoreWorkspace\Code\Calculator\CalculatorLibUnitTests>PS D:\LearningRecords\doc\C#\NetCoreWorkspace\Code\Calculator\CalculatorLibUnitTests>PS D:\LearningRecords\doc\C#\NetCoreWorkspace\Code\Calculator\CalculatorLibUnitTests> dotnet test
正在確定要還原的專案… 所有專案均是最新的,無法還原,
你正在使用 .NET 的預覽版,請查看 https://aka.ms/dotnet-core-preview CalculatorLib -> D:\LearningRecords\doc\C#\NetCoreWorkspace\Code\Calculator\CalculatorLib\bin\Debug\net6.0\CalculatorLib.dll
CalculatorLibUnitTests -> D:\LearningRecords\doc\C#\NetCoreWorkspace\Code\Calculator\CalculatorLibUnitTests\bin\Debug\net6.0\CalculatorLibUnitTests.dllD:\LearningRecords\doc\C#\NetCoreWorkspace\Code\Calculator\CalculatorLibUnitTests\bin\Debug\net6.0\CalculatorLibUnitTests.dll (.NETCoreApp,Version=v6.0)的測驗運行
Microsoft (R) 測驗執行命令列工具版本 17.0.0-preview-20210817-02
著作權所有 (C) Microsoft Corporation,保留所有權利,
正在啟動測驗執行,請稍候...
總共 1 個測驗檔案與指定模式相匹配,
已通過! - 失敗: 0,通過: 2,已跳過: 0,總計: 2,持續時間: 2 ms - CalculatorLibUnitTests.dll (net6.0)PS D:\LearningRecords\doc\C#\NetCoreWorkspace\Code\Calculator\CalculatorLibUnitTests>
轉載請註明出處,本文鏈接:https://www.uj5u.com/net/350666.html
標籤:.NET技术
