カテゴリー
Microsoft

Mac で C# のHello World 相当な小さな単体テストを cli, dotnet コマンドで気楽に始めるまで

まとめ

  1. brew instrall dotnet
  2. dotnet --help を見ながらプロジェクトとそのテストプロジェクトと、これらを含めるソリューションの作成を進めていく。
  3. dotnet test

1. .NET のインストール

brew install dotnet

実際

brew install dotnet
==> Auto-updating Homebrew...
Adjust how often this is run with HOMEBREW_AUTO_UPDATE_SECS or disable with
HOMEBREW_NO_AUTO_UPDATE. Hide these hints with HOMEBREW_NO_ENV_HINTS (see `man brew`).
Warning: Treating dotnet as a formula. For the cask, use homebrew/cask/dotnet or specify the `--cask` flag.
==> Downloading https://ghcr.io/v2/homebrew/core/dotnet/manifests/8.0.3
################################################################################################################################# 100.0%
==> Fetching dotnet
==> Downloading https://ghcr.io/v2/homebrew/core/dotnet/blobs/sha256:63c8e11132a0f13bbc45677dc3c46aed4781644c7132ed767a6a4b7994cfd58f
################################################################################################################################# 100.0%
==> Pouring dotnet--8.0.3.sonoma.bottle.tar.gz
==> Caveats
For other software to find dotnet you may need to set:
  export DOTNET_ROOT="/usr/local/opt/dotnet/libexec"

zsh completions have been installed to:
  /usr/local/share/zsh/site-functions
==> Summary
🍺  /usr/local/Cellar/dotnet/8.0.3: 4,080 files, 449.7MB
==> Running `brew cleanup dotnet`...
Disable this behaviour by setting HOMEBREW_NO_INSTALL_CLEANUP.
Hide these hints with HOMEBREW_NO_ENV_HINTS (see `man brew`).

dotnet --list-sdks
8.0.103 [/usr/local/Cellar/dotnet/8.0.3/libexec/sdk]

2. C# プロジェクトとソリューション作り

mkdir -p ~/trial_csharp/HelloWorld
cd ~/trial_csharp/HelloWorld

# プロジェクト作成
dotnet new classlib -n MyLibrary
dotnet new xunit -n MyLibrary.Tests
# テストプロジェクトへのクラスライブラリの参照追加
dotnet add MyLibrary.Tests/MyLibrary.Tests.csproj reference MyLibrary/MyLibrary.csproj
# ソリューションファイルの作成 (オプションの位置付け)
dotnet new sln -n MySolution
dotnet sln MySolution.sln add MyLibrary/MyLibrary.csproj
dotnet sln MySolution.sln add MyLibrary.Tests/MyLibrary.Tests.csproj
# 確認
dotnet sln list

実践

# プロジェクト作成
dotnet new classlib -n MyLibrary
dotnet new xunit -n MyLibrary.Tests

テンプレート "クラス ライブラリ" が正常に作成されました。

作成後の操作を処理しています...
/Users/oki2a24/trial_csharp/HelloWorld/MyLibrary/MyLibrary.csproj を復元しています:
  Determining projects to restore...
  Restored /Users/oki2a24/trial_csharp/HelloWorld/MyLibrary/MyLibrary.csproj (in 474 ms).
正常に復元されました。

テンプレート "xUnit Test Project" が正常に作成されました。

作成後の操作を処理しています...
/Users/oki2a24/trial_csharp/HelloWorld/MyLibrary.Tests/MyLibrary.Tests.csproj を復元しています:
  Determining projects to restore...
  Restored /Users/oki2a24/trial_csharp/HelloWorld/MyLibrary.Tests/MyLibrary.Tests.csproj (in 9.31 sec).
正常に復元されました。

# テストプロジェクトへのクラスライブラリの参照追加
dotnet add MyLibrary.Tests/MyLibrary.Tests.csproj reference MyLibrary/MyLibrary.csproj

参照 `..\MyLibrary\MyLibrary.csproj` がプロジェクトに追加されました。

# ソリューションファイルの作成 (オプションの位置付け)
dotnet new sln -n MySolution
dotnet sln MySolution.sln add MyLibrary/MyLibrary.csproj
dotnet sln MySolution.sln add MyLibrary.Tests/MyLibrary.Tests.csproj

テンプレート "ソリューション ファイル" が正常に作成されました。

プロジェクト `MyLibrary/MyLibrary.csproj` をソリューションに追加しました。
プロジェクト `MyLibrary.Tests/MyLibrary.Tests.csproj` をソリューションに追加しました。
# 確認
dotnet sln list
プロジェクト
------
MyLibrary.Tests/MyLibrary.Tests.csproj
MyLibrary/MyLibrary.csproj

3. サンプルコードを追加してテストを実行する。

MyLibrary/Class1.cs

namespace MyLibrary;

public class Class1
{
        public int Add(int a, int b)
        {
            return a + b;
        }
}

MyLibrary.Tests/UnitTest1.cs

namespace MyLibrary.Tests;

public class UnitTest1
{
    [Fact]
    public void TestAdd()
    {
        // Arrange
        var class1 = new Class1();
        int a = 5;
        int b = 3;

        // Act
        int result = class1.Add(a, b);

        // Assert
        Assert.Equal(8, result);
    }
}

テストを実行する。

dotnet test

実践

dotnet test
  Determining projects to restore...
  Restored /Users/oki2a24/trial_csharp/HelloWorld/MyLibrary.Tests/MyLibrary.Tests.csproj (in 430 ms).
  1 of 2 projects are up-to-date for restore.
  MyLibrary -> /Users/oki2a24/trial_csharp/HelloWorld/MyLibrary/bin/Debug/net8.0/MyLibrary.dll
  MyLibrary.Tests -> /Users/oki2a24/trial_csharp/HelloWorld/MyLibrary.Tests/bin/Debug/net8.0/MyLibrary.Tests.dll
/Users/oki2a24/trial_csharp/HelloWorld/MyLibrary.Tests/bin/Debug/net8.0/MyLibrary.Tests.dll (.NETCoreApp,Version=v8.0) のテスト実行
Microsoft (R) Test Execution Command Line Tool Version 17.8.0 (x64)
Copyright (c) Microsoft Corporation.  All rights reserved.

テスト実行を開始しています。お待ちください...
合計 1 個のテスト ファイルが指定されたパターンと一致しました。

成功!   -失敗:     0、合格:     1、スキップ:     0、合計:     1、期間: < 1 ms - MyLibrary.Tests.dll (net8.0)

おわりに

Visual Studio Code からビルドやテストやデバッグをできるようになりたい、と思いいろいろいじっていたのですが、なんだかうまくいきませんでした。。。

それで、 dotnet を最初 cli からインストールしたことを思い出し、 cli で全部できるんだろうなと思い、取り組んでみた次第です。

うまくいきました!

環境をこれで手に入れられたので、本手順のブラッシュアップや、 VS Code の環境構築の、足がかりにできるかなと思います♪

以上です。

コメントを残す