dotnet.exeで単体テスト(mstest)を実施する為のプロジェクトの作成方法を調べてみました。
プロジェクトの作成
// ソリューション名:QQQ
// WinFormsプロジェクト名:QQQ.Winform
// 単体テストプロジェクト名:QQQ.Tests
// ソリューションの作成
mkdir QQQ
cd QQQ
dotnet new sln
// 単体テストのプロジェクト作成
mkdir QQQ.Tests
cd QQQ.Tests
dotnet new mstest
dotnet sln ..\QQQ.sln add QQQ.Tests.csproj
cd ..
// WinFormsのプロジェクト作成
mkdir QQQ.Winform
cd QQQ.Winform
dotnet new winforms
dotnet sln ..\QQQ.sln add QQQ.Winform.csproj
cd ..
cd QQQ.Tests
code .
//プロジェクト(QQQ.Tests.csproj)のターゲットフレームワークを「net6.0」から「 net6.0-windows」に変更する。
// 単体テストプロジェクトからWinFormsプロジェクトを参照
dotnet add reference ../QQQ.Winform
プログラムソース
ファイル名:QQQ.Tests.csproj
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
<TargetFramework>net6.0-windows</TargetFramework>
<ImplicitUsings>enable</ImplicitUsings>
<Nullable>enable</Nullable>
<IsPackable>false</IsPackable>
</PropertyGroup>
<ItemGroup>
<PackageReference Include="Microsoft.NET.Test.Sdk" Version="17.1.0" />
<PackageReference Include="MSTest.TestAdapter" Version="2.2.8" />
<PackageReference Include="MSTest.TestFramework" Version="2.2.8" />
<PackageReference Include="coverlet.collector" Version="3.1.2" />
</ItemGroup>
<ItemGroup>
<ProjectReference Include="..\QQQ.Winform\QQQ.Winform.csproj" />
</ItemGroup>
</Project>
ファイル名:UnitTest1.cs
プロジェクト(ディレクトリ):QQQ.Tests
namespace QQQ.Tests
{
[TestClass]
public class UnitTest1
{
[TestMethod]
public void TestMethod1()
{
var obj = new QQQ.Winform.Sample();
int result = obj.Add(1, 1);
Assert.AreEqual(2, result);
}
}
}
ファイル名:Sample.cs
プロジェクト(ディレクトリ):QQQ.Winform
namespace QQQ.Winform
{
public class Sample
{
public int Add(int a, int b)
{
return a + b;
}
}
}
テストの実行
PS E:\csharp\winform\QQQ\QQQ.Tests> dotnet test
復元対象のプロジェクトを決定しています...
復元対象のすべてのプロジェクトは最新です。
QQQ.Winform -> E:\csharp\winform\QQQ\QQQ.Winform\bin\Debug\net6.0-windows\QQQ.Winform.dll
QQQ.Tests -> E:\csharp\winform\QQQ\QQQ.Tests\bin\Debug\net6.0-windows\QQQ.Tests.dll
E:\csharp\winform\QQQ\QQQ.Tests\bin\Debug\net6.0-windows\QQQ.Tests.dll (.NETCoreApp,Version=v6.0) のテスト実行
Microsoft (R) Test Execution Command Line Tool Version 17.2.0 (x64)
Copyright (c) Microsoft Corporation. All rights reserved.
テスト実行を開始しています。お待ちください...
合計 1 個のテスト ファイルが指定されたパターンと一致しました。
成功! -失敗: 0、合格: 1、スキップ: 0、合計: 1、期間: 13 ms - QQQ.Tests.dll (net6.0
当初、単体テストプロジェクトにWinFormsプロジェクトを参照しようとするとターゲットプロジェクトの種類が対応できない旨のエラーメッセージが表示され詰まります。そこで、単体テストのプロジェクトファイルのターゲットフレームワークを「net6.0」から「 net6.0-windows」に変更するとプロジェクトの参照が出来るようになりました。
コメント