dotnet.exeでwinformsの単体テスト(mstest)のプロジェクト作成

四季之遊覧 夏 コンピュータ
出典:国立国会図書館「NDLイメージバンク」 (https://rnavi.ndl.go.jp/imagebank/)
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」に変更するとプロジェクトの参照が出来るようになりました。

コメント