參考資料
dotnet 命令參考
使用 dotnet test 和 xUnit 在 .NET 中對 C# 進行單元測試
Declaring InternalsVisibleTo in the csproj
XUnit輸出訊息
建立控制檯專案
# 建立專案目錄
md DotnetStudy
cd DotnetStudy
# 建立解決方案
dotnet new sln
# 建立控制檯專案,-n: 名稱,--use-program-main: 不適用頂級語句
dotnet new console -n HelloDotnet --use-program-main
# 將專案新增到解決方案
dotnet sln add HelloDotnet\HelloDotnet.csproj
# 編譯
dotnet build --configuration Release
# 執行
dotnet run --configuration Release --project HelloDotnet\HelloDotnet.csproj
新增一個類
namespace HelloDotnet
{
internal class Calc
{
public int Add(int a, int b)
{
return a + b;
}
}
}
新增單元測試專案
# 建立 xunit 專案
dotnet new xunit -o HelloDotnet.Tests
# 將 xunit 專案新增到解決方案
dotnet sln add HelloDotnet.Tests\HelloDotnet.Tests.csproj
# 將控制檯專案作為依賴新增到 xunit 專案
dotnet add HelloDotnet.Tests\HelloDotnet.Tests.csproj reference HelloDotnet\HelloDotnet.csproj
設定單元測試可訪問 internal
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
<OutputType>Exe</OutputType>
<TargetFramework>net8.0</TargetFramework>
<ImplicitUsings>enable</ImplicitUsings>
<Nullable>enable</Nullable>
</PropertyGroup>
<!-- 設定單元測試可訪問 internal -->
<ItemGroup>
<AssemblyAttribute Include="System.Runtime.CompilerServices.InternalsVisibleToAttribute">
<_Parameter1>HelloDotnet.Tests</_Parameter1>
</AssemblyAttribute>
</ItemGroup>
</Project>
單元測試程式碼
namespace HelloDotnet.Tests;
public class UnitTest1
{
[Fact]
public void Test1()
{
Calc calc = new();
Assert.Equal(3, calc.Add(1, 2));
}
}
執行單元測試
dotnet test HelloDotnet.Tests\HelloDotnet.Tests.csproj
關於單元測試的輸出
using Xunit.Abstractions;
namespace HelloDotnet.Tests;
public class UnitTest1
{
ITestOutputHelper output;
public UnitTest1(ITestOutputHelper output)
{
this.output = output;
}
[Fact]
public void Test1()
{
output.WriteLine("add test");
Calc calc = new();
Assert.Equal(3, calc.Add(1, 2));
}
}
gitignore
dotnet new gitignore