読者です 読者をやめる 読者になる 読者になる

miso_soup3 Blog

主に ASP.NET 関連について書いています。

Visual Studio 2013 で xUnit を使う

Visual Studio xUnit

Visual Studio 2013 で xUnit を使う手順を記載。

xUnit とは

xUnit.net とは、.NET Framework のためのユニットテストフレームワーク。

環境
  • Visual Studio 2013 Update 4
  • xUnit 2.0.0

テスト対象のプロジェクトを用意する

ファイル>新規作成>プロジェクト。「C#」で「クラスライブラリ」を選択。
プロジェクト名は例として「ClassLibrary1」とし、以下のように「MyMessage.cs」クラスを作成する。

f:id:miso_soup3:20150427155820p:plain

テストを書く用のプロジェクトを追加する。
ソリューションを右クリック>追加>新しいプロジェクト。

f:id:miso_soup3:20150427155831p:plain

「C#」の「クラスライブラリ」を選択。
プロジェクト名は例として「MyClassLibraryTest」とし、「MyMessage.cs」クラスを作成する。

f:id:miso_soup3:20150427155851p:plain

「MyClassLibraryTest」プロジェクトを右クリック>追加>参照 で、「MyClassLibrary」の参照を追加する。

f:id:miso_soup3:20150427155957p:plain

「パッケージマネージャコンソール」ウィンドウを開き、既定のプロジェクトを「MyClassLibraryTest」をし、
「install-package xunit」を入力する。

f:id:miso_soup3:20150427160021p:plain
f:id:miso_soup3:20150427160033p:plain

続いて「install-package xunit.runner.visualstudio」を入力する。

f:id:miso_soup3:20150427160042p:plain

インストール完了後の「MyClassLibraryTest」の「packages.config」は以下のようになった。

<?xml version="1.0" encoding="utf-8"?>
<packages>
  <package id="xunit" version="2.0.0" targetFramework="net451" />
  <package id="xunit.abstractions" version="2.0.0" targetFramework="net451" />
  <package id="xunit.assert" version="2.0.0" targetFramework="net451" />
  <package id="xunit.core" version="2.0.0" targetFramework="net451" />
  <package id="xunit.extensibility.core" version="2.0.0" targetFramework="net451" />
  <package id="xunit.runner.visualstudio" version="2.0.0" targetFramework="net451" />
</packages>

「MyMessageTest.cs」に以下のようにテストを書く。
MyMessage クラスの Say メソッドが「Hello, world」を返しているかどうかを書いている。

using MyClassLibrary;
using Xunit;

namespace MyClassLibraryTest
{
    public class MyMessageTest
    {
        [Fact]
        public void SayTest()
        {
            var message = new MyMessage();
            string actual = message.Say();

            string expect = "Hello, world";

            //assert
            Assert.Equal(expect, actual);
        }
    }
}

テストメソッドには [Fact] 属性を付与する。

メニューから テスト >ウィンドウ>テストエクスプローラー を開く。

f:id:miso_soup3:20150427160111p:plain

「すべて実行」からテストを実行することができる。

f:id:miso_soup3:20150427160121p:plain

試しに、間違った実装に変更し、再度テストを実行すると、次のように失敗と表示される。

f:id:miso_soup3:20150427160129p:plain
f:id:miso_soup3:20150427160136p:plain

ちなみに実装クラスの方では、このように表示されている。

f:id:miso_soup3:20150427160149p:plain

ブレイクポイントを設置すれば右クリックからデバッグも可能。

f:id:miso_soup3:20150427160159p:plain

Setup 例

プロジェクト全体の準備コードを書く場合のコード例を書いておく。
参照:https://gist.github.com/bradwilson/8423477

/// <summary>
/// プロジェクト全体のテストの準備(Setup)
/// </summary>
using Xunit;

public class Fixture : IDisposable
{
   public Fixture()
   {
      //準備
   }

   public void Dispose()
   {
   }
}

[CollectionDefinition(“CallFixture”)]
public class ProjectSetup : ICollectionFixture<Fixture> { }

テスト実行前に準備を処理したいときは、次のように[Collection(“CallFixture”)]属性を付与。

using Xunit;

[Collection(“CallFixture”)]
public class HogeTest
{
   [Fact]
   public void Test() 
   {
      //test
   }
}