今日もちょいつか

お酒の飲み過ぎか、それとも歳のせいなのか毎日ちょっぴり疲れ気味なフリーのソフト屋です。ソフト開発の話題をblogにしてみます。

ASP.NET Core MVC xUnitに挑戦(かなりの超初心者です)

どうやら、xUnit(テスティングフレームワーク)が
とても便利らしいとの情報をネットで発見したので調べてみました。
テストコードを記述することで、簡単に何度でもテストが
できるのでソースを変更した後の確認がとても楽なのでは!と思いました。

で、ネットを調べてみたのですが・・・。難しい。
ネットのみなさんの技術レベルが高すぎて初心者の私では
とても理解ができないのでした。
それでもなんとかxUnitを動かすことができたのでまとめておきます。

技術レベルがとても低いので、きちんとした作法にのっとっているのかさえ
わからずただ動いたー。だけです。
Visual Studio Community 2017 for Mac で動作確認しています。

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

テスト対象用プロジェクトとして、プロジェクトを作成します。
f:id:Heinlein:20180206133436p:plain
そして「CalcClass.cs」を追加します。引数を加算して結果を返す単純なものです。

namespace xUnitProjct
{
    public class CalcClass
    {
        public int sum(int a, int b){
            int result = a + b;
            return result;
        }
    }
}

そして、HomeController.csはこんな感じ。

     public IActionResult Index()
     {
         CalcClass calc = new CalcClass();
         int subval = calc.sum(1, 2);
         ViewData["CalcValue"] = subval.ToString();
         return View();
     }

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

ソリューションを右クリック>追加>新しいプロジェクトを追加。
f:id:Heinlein:20180206101632p:plain
左側の.NET Core>テストを選択してxUnitテストプロジェクトを選択。
f:id:Heinlein:20180206102041p:plain
プロジェクト名は
先程のプロジェクト名 + 「.Tests」として、xUnitProjct.Tests で作成します。

テスト用プロジェクトに参照設定

テスト用に作成した「xUnitProjct.Tests」がテスト対象のプロジェクト「xUnitProjct」を認識できるように参照設定をします。
f:id:Heinlein:20180206103432p:plain
開いた画面の「プロジェクト」タブを選択すると
先程作成したxUnitProjctが現れるのでチェックをしてOKをクリックします。
f:id:Heinlein:20180206134616p:plain

テストコードを記述する

テスト用プロジェクトのUnitTest1.csにテスコトードを記述します。

namespace xUnitProjct.Tests
{
    public class UnitTest1
    {
        [Fact]
        public void Test1()
        {
            CalcClass calc = new CalcClass();
            int actual = calc.sum(1, 2);
            int expect = 3;
            Assert.Equal(expect, actual);
        }
    }
}

期待値と実際の結果が合致するかテストします。
実際のテストの実行は、メニュー > 表示 > テストを選択すると画面右上に
単体テストのタブが現れますので、「全て実行」をクリックするとテストが実行されます。
f:id:Heinlein:20180206143341p:plain
無事にテストが成功となりました。

一応確認のために、わざとテストを失敗させてみます。
期待値のところを expect = 3 から 5 に変更してテストを実行してみます。
f:id:Heinlein:20180206143756p:plain
赤く表示されてテストが失敗となりました。きちんとテストができているようです!

さいごに

なんとかxUnitを動かすことができました。
参考にしたサイトはこちらです。
docs.microsoft.com
参考にしたサイトでは、dotnetコマンドを使って実現していたので
なんとかVisual Studio Community 2017 for Macで実行できるようにがんばりました。

テストの内容としてはとても現実的ではないのでただxUnitが動いたに過ぎません。
ここからいかに現実的で効率の良いテストコードを作成できるかだと思います。