[.NET][C#]NUnitのStringAssertアサーションメソッド一覧

# はじめに
[前回](https://qiita.com/suganury/items/9f2c3af979ca071726f2)、NUnitのAssertクラスのClassicModelのアサーションメソッドを一通り試したので
今回はStringAssertクラスのアサーションメソッドを一通り試してみる。

# 実施環境
.NET：3.1.401
C#：8.0
NUnit：3.12.0

# StringAssertクラス
NUnitのClassicModelのアサーションクラスの1つ。
クラス名の通り、文字列を検査する。
全てのメソッドは大文字小文字を区別して判定する。

## 1. Contains、DoesNotContain
Containsメソッドは、第1引数の文字列が第2引数の文字列内に含まれていることを検査する。
DoesNotContainメソッドは、その逆で第1引数の文字列が第2引数の文字列内に含まれていないことを検査する。

```C#
[TestCase("hoge", "aaahogeaaa")]// Test OK.
[TestCase("hoge", "aaahogaaa")]// Test NG.
[TestCase("hoge", "aaaHOGEaaa")]// Test NG.
public void ContainsTest(string expected, string actual)
{
    StringAssert.Contains(expected, actual);
}

[TestCase("hoge", "aaahogeaaa")]// Test NG.
[TestCase("hoge", "aaahogaaa")]// Test OK.
[TestCase("hoge", "aaaHOGEaaa")]// Test OK.
public void DoesNotContainTest(string expected, string actual)
{
    StringAssert.DoesNotContain(expected, actual);
}
```

## 2. StartsWith、DoesNotStartWith
StartsWithメソッドは、第1引数の文字列が第2引数の文字列の接頭辞になっていることを検査する。
DoesNotStartWithメソッドは、第1引数の文字列が第2引数の文字列の接頭辞になっていないことを検査する。

```C#
[TestCase("hoge", "hogeaaa")]// Test OK.
[TestCase("hoge", "hogaaa")]// Test NG.
[TestCase("hoge", "HOGEaaa")]// Test NG.
public void StartsWithTest(string expected, string actual)
{
    StringAssert.StartsWith(expected, actual);
}

[TestCase("hoge", "hogeaaa")]// Test NG.
[TestCase("hoge", "hogaaa")]// Test OK.
[TestCase("hoge", "HOGEaaa")]// Test OK.
public void DoesNotStartWithTest(string expected, string actual)
{
    StringAssert.DoesNotStartWith(expected, actual);
}
```

ちなみに、公式サイトのドキュメントでは、
DoesNotStart<font color="red">s</font>Withと記載されているが、
DoesNotStartWithが正しい。
（StartsWithは、Withの前にsがあるので実装ミス？）

## 3. EndsWith、DoesNotEndWith
StartsWithの接尾辞版。

```C#
[TestCase("hoge", "aaahoge")]// Test OK.
[TestCase("hoge", "aaahog")]// Test NG.
[TestCase("hoge", "aaaHOGE")]// Test NG.
public void EndsWithTest(string expected, string actual)
{
    StringAssert.EndsWith(expected, actual);
}

[TestCase("hoge", "aaahoge")]// Test NG.
[TestCase("hoge", "aaahog")]// Test OK.
[TestCase("hoge", "aaaHOGE")]// Test OK.
public void DoesNotEndWithTest(string expected, string actual)
{
    StringAssert.DoesNotEndWith(expected, actual);
}
```

## 4. AreEqualIgnoringCase、AreNotEqualIgnoringCase
AreEqualIgnoringCaseメソッドは、第1引数と第2引数の文字列が大文字小文字無視で一致していることを検査する。
AreNotEqualIgnoringCaseメソッドは、第1引数と第2引数の文字列が大文字小文字無視で一致していないことを検査する。
当然だが、半角全角を区別しないというわけではない。

```C#

[TestCase("hoge", "HOGE")]// Test OK.
[TestCase("hoge", "Hoge")]// Test OK.
[TestCase("hoge", "HOG")]// Test NG.
[TestCase("hoge", "ｈｏｇｅ")]// Test NG.
public void AreEqualIgnoringCaseTest(string expected, string actual)
{
    StringAssert.AreEqualIgnoringCase(expected, actual);
}

[TestCase("hoge", "HOGE")]// Test NG.
[TestCase("hoge", "Hoge")]// Test NG.
[TestCase("hoge", "HOG")]// Test OK.
[TestCase("hoge", "ｈｏｇｅ")]// Test OK.
public void AreNotEqualIgnoringCaseTest(string expected, string actual)
{
    StringAssert.AreNotEqualIgnoringCase(expected, actual);
}

```

## 5. IsMatch、DoesNotMatch
IsMatchメソッドは、第1引数の正規表現パターンが第2引数の文字列にマッチするか検査する。
DoesNotMatchメソッドは、第1引数の正規表現パターンが第2引数の文字列にマッチしないか検査する。

```C#

[TestCase("^[0-9]{3}hoge[A-Z]{3}$", "123hogeABC")]// Test OK.
[TestCase("[0-9]*", "hoge123hoge")]// Test OK.
[TestCase("^[0-9]{3}hoge[A-Z]{3}$", "ABChoge123")]// Test NG.
public void IsMatchTest(string regexPattern, string actual)
{
    StringAssert.IsMatch(regexPattern, actual);
}

[TestCase("^[0-9]{3}hoge[A-Z]{3}$", "123hogeABC")]// Test NG.
[TestCase("[0-9]*", "hoge123hoge")]// Test NG.
[TestCase("^[0-9]{3}hoge[A-Z]{3}$", "ABChoge123")]// Test OK.
public void DoesNotMatchTest(string regexPattern, string actual)
{
    StringAssert.DoesNotMatch(regexPattern, actual);
}

```


# 参考
[NUnit公式：StringAssert](https://docs.nunit.org/articles/nunit/writing-tests/assertions/classic-assertions/String-Assert.html)