5
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

C#Advent Calendar 2024

Day 7

【MSTest】MSTestを使いたい【C#】

Last updated at Posted at 2024-12-06

はじめに

MSTestを使ってみた記事になります。
「テストコードを書いてみた」というよりは、テストを行いたいプロジェクトがすでにあって、テストをするプロジェクトを作るのに手こずったのでそっちをメインに書きます。

想定の読者

既存のプロジェクトに対してテストコードを書いてみたい方

やること

MSTestを用いたテストをする。
テストコードを書くのは他の記事に任せて、ここではテストするプロジェクトをどうやって作るかを書く。

準備

テスト対象のプロジェクトを準備する。
ここでは下記のプロジェクトをテスト対象にします。

C:.
│  Program.cs
│  target.csproj
│  target.sln
│
└─Tools
        CompareString.cs ←今回テストコードを書くクラス
CompareString.cs
namespace target.tools;

public class ComparerString
{

    /// <summary>
    /// 文字列の値を比較する。
    /// </summary>
    /// <param name="s1">比較対象の文字列</param>
    /// <param name="s2">比較対象の文字列</param>
    /// <returns>文字列が一致していれば0</returns>
    public int Compare(string s1, string s2)
    {

        if (s1 != null && s2 != null)
        {

            return s1.Equals(s2) ? 0 : 1;
        }
        else
        {

            throw new NullReferenceException();
        }
    }
}

(補足)
↓コマンドでプロジェクトのフォーマットを作りました。

> dotnet new console -n target

プロジェクトの作成

テストをするプロジェクトの作成

「target」フォルダと同階層に、テストをするための「test」プロジェクトを作成します。

> dotnet new mstest -n test

↓作成後はこうなります。
タイトルなし.png

最初は「target」フォルダの中にテスト用のプロジェクト「test」を入れたかったのですが、「target」プロジェクトと「test」プロジェクトでAssembly Infoとやらが競合してしまい、解決が難しかったので、とりあえず外だしでやってみました。

参照を追加

> dotnet add .\test\test.csproj reference .\target\target.csproj

これをしないとテストをするプロジェクト「test」からテスト対象プロジェクト「target」のクラスを参照できません。

依存関係を解決できるようにソリューションにも追加しておきます。

> cd target
> dotnet sln add ..\test\test.csproj

テストコード作成

「target」プロジェクトをテストするためのフォルダとファイルを「test」プロジェクトに作ります。フォルダ構成とテストコードの配置はテスト対象のプロジェクトと同じ構成がわかりやすいかと思います。
タイトルなし.png

テストコードを書きます。(コードの内容は割愛)

CompareStringTest.cs
using target.tools;

namespace test.target.tools;

[TestClass]
public class CompareStringTests
{

    [TestMethod]
    public void Compareはセルの値が一致している時0を返す()
    {

        // setup
        var comparer = new ComparerString();
        string s1 = "Test";
        string s2 = "Test";

        // exercize
        int result = comparer.Compare(s1, s2);

        // verify
        Assert.AreEqual(0, result);
    }

    [TestMethod]
    public void Compareはセルの値が一致しない時0以外を返す()
    {

        // setup
        var comparer = new ComparerString();
        string s1 = "Test1";
        string s2 = "Test2";

        // exercize
        int result = comparer.Compare(s1, s2);

        // verify
        Assert.AreNotEqual(0, result);
    }

    [TestMethod]
    [ExpectedException(typeof(NullReferenceException))]
    public void Compareはセルの値がnullの時NullReferenceExceptionを返す()
    {

        // setup
        var comparer = new ComparerString();
        string? s1 = null;
        string s2 = "Test";

        // exercize
        int result = comparer.Compare(s1, s2);

        // verify
        // ExpectedExceptionで例外をチェック
    }
}

テスト実行

テストを実行します。

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

成功!   -失敗:     0、合格:     4、スキップ:     0、合計:     4、期間: 761 ms - test.dll (net8.0)

テストが実行できました。(テストケースが1個おおいのはデフォルトで作成されてたUnitTest.csです。)

5
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
5
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?