こういうのって実際のやつで試してみた方がいいんだろうけどとりあえず簡単なまとめ。
今回macでやっているのでxUnitを使っていきます。
次にソリューションから追加で新しいプロジェクトを追加でxUnitを追加する。

テストコード
UnitTest1.cs
using Xunit;
namespace unit_sample
{
public class UnitTest1
{
[Fact]
public void Test1()
{
Assert.True(true);
}
}
}
実行は右にある単体テストのところから行う。

DisplayName
[Fact]にDisplayNameを加えると下の実行の所にDisplayNameが出てくる。
UnitTest1.cs
using Xunit;
namespace unit_sample
{
public class UnitTest1
{
[Fact(DisplayName = "サンプルテスト")]
public void Test1()
{
Assert.True(true);
}
}
}
実行結果 左下のところにDisplayNameで設定したものが出ている。

Skip
[Fact]にSkipを加えるとそのテストはSkipされる。
UnitTest1.cs
using Xunit;
namespace unit_sample
{
public class UnitTest1
{
[Fact(DisplayName = "サンプルテスト")]
public void Test1()
{
Assert.True(true);
}
[Fact(Skip = "無視する")]
public void Test2()
{
Assert.True(true);
}
}
}
Timeout
[Fact]にTimeoutを設定してあげると時間の上限を定めることができる。
UnitTest1.cs
using System.Threading.Tasks;
using Xunit;
namespace unit_sample
{
public class UnitTest1
{
[Fact(DisplayName = "サンプルテスト")]
public void Test1()
{
Assert.True(true);
}
[Fact(Timeout = 3000)]
public async Task Test2()
{
await Task.Delay(4000);
Assert.True(true);
}
}
}
Theory
メソッド一つで複数回の実行も可能
下記例であれば、aに1,0,-1がそれぞれ代入され実行される。
UnitTest1.cs
using Xunit;
namespace unit_sample
{
public class UnitTest1
{
[Theory]
[InlineData(1)]
[InlineData(0)]
[InlineData(-1)]
public void Test1(int a)
{
Assert.InRange(a, -2, 2);
}
}
}
以下Assertの使い方。
分からないものが結構あったので学んでいきたいところ...
最初のTrueだとか以外はABCの順番でやっていったので
後で同系統のものをまとめたい。
tureであるかどうか
UnitTest1.cs
using Xunit;
namespace unit_sample
{
public class UnitTest1
{
[Fact]
public void Test1()
{
Assert.True(true);
}
}
}
falseかどうか
UnitTest1.cs
using Xunit;
namespace unit_sample
{
public class UnitTest1
{
[Fact]
public void Test1()
{
Assert.False(false);
}
}
}
Listが空かどうか
UnitTest1.cs
using System.Collections.Generic;
using Xunit;
namespace unit_sample
{
public class UnitTest1
{
[Fact]
public void Test1()
{
Assert.Empty(new List<string>());
}
}
}
文字列の後ろにxxxが含まれているかどうか
引数1がxxxで引数2が対象の文字列
UnitTest1.cs
using Xunit;
namespace unit_sample
{
public class UnitTest1
{
[Fact]
public void Test1()
{
Assert.EndsWith("es", "studies");
}
}
}
AとBが同じかどうか
UnitTest1.cs
using Xunit;
namespace unit_sample
{
public class UnitTest1
{
[Fact]
public void Test1()
{
Assert.Equal("aaa", "aaa");
}
}
}
範囲に入っているかどうか
第一引数が実際のやつ
第二引数が下限
第三引数が上限
UnitTest1.cs
using Xunit;
namespace unit_sample
{
public class UnitTest1
{
[Fact]
public void Test1()
{
Assert.InRange(3, 1, 4);
}
}
}
文字列もできるが使い道はないか。
下の例だとb,c,d,eが範囲となる
UnitTest1.cs
using Xunit;
namespace unit_sample
{
public class UnitTest1
{
[Fact]
public void Test1()
{
Assert.InRange("c", "b", "e");
}
}
}
型の一致確認
UnitTest1.cs
using Xunit;
namespace unit_sample
{
public class UnitTest1
{
[Fact]
public void Test1()
{
int a = 22;
Assert.IsType(a.GetType(), 32);
}
}
}
型の不一致の確認
UnitTest1.cs
using Xunit;
namespace unit_sample
{
public class UnitTest1
{
[Fact]
public void Test1()
{
string a = "a";
Assert.IsNotType(a.GetType(), 32);
}
}
}
正規表現とマッチしているかどうか
UnitTest1.cs
using Xunit;
namespace unit_sample
{
public class UnitTest1
{
[Fact]
public void Test1()
{
Assert.Matches("[a-z]", "a");
}
}
}
リストが空ではないかどうか
UnitTest1.cs
using System.Collections.Generic;
using Xunit;
namespace unit_sample
{
public class UnitTest1
{
[Fact]
public void Test1()
{
Assert.NotEmpty(new List<string>{ "apple"});
}
}
}
AとBが同じではないかどうか
UnitTest1.cs
using Xunit;
namespace unit_sample
{
public class UnitTest1
{
[Fact]
public void Test1()
{
Assert.NotEqual("aaa", "bbb");
}
}
}
範囲に入っていないかどうか
UnitTest1.cs
using Xunit;
namespace unit_sample
{
public class UnitTest1
{
[Fact]
public void Test1()
{
Assert.NotInRange(5, 1, 4);
}
}
}
Nullではないかどうか
UnitTest1.cs
using Xunit;
namespace unit_sample
{
public class UnitTest1
{
[Fact]
public void Test1()
{
int a = 1;
Assert.NotNull(a);
}
}
}
同じではないかどうか
UnitTest1.cs
using Xunit;
namespace unit_sample
{
public class UnitTest1
{
[Fact]
public void Test1()
{
Assert.NotSame("a", "b");
}
}
}
Nullかどうか
UnitTest1.cs
using Xunit;
namespace unit_sample
{
public class UnitTest1
{
[Fact]
public void Test1()
{
Assert.Null(null);
}
}
}
同じかどうか
UnitTest1.cs
using Xunit;
namespace unit_sample
{
public class UnitTest1
{
[Fact]
public void Test1()
{
Assert.Same("aaa", "aaa");
}
}
}
要素が一つかどうか
UnitTest1.cs
using System.Collections.Generic;
using Xunit;
namespace unit_sample
{
public class UnitTest1
{
[Fact]
public void Test1()
{
Assert.Single(new List<int> {1});
}
}
}
最初の文字がxxxで始まるかどうか
UnitTest1.cs
using Xunit;
namespace unit_sample
{
public class UnitTest1
{
[Fact]
public void Test1()
{
Assert.StartsWith("red", "redmine");
}
}
}