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

# はじめに
前回、NUnitのCollectionAssertクラスのアサーションメソッドを一通り試したので
今回はFileAssertクラス、DirectoryAssertクラスのアサーションメソッドを一通り試してみる。

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

# FileAssertクラス
NUnitのClassicModelのアサーションクラスの1つ。
クラス名の通り、ファイルを検査する。

## 1. AreEqual、AreNotEqualメソッド
AreEqualメソッドは、2つのファイル内容が同じ内容であることを検査する。
AreNotEqualメソッドは、その逆の判定を行う。

```C#
[TestCase]
public void FileAreEqualTest1()
{
    // Test OK.
    using (FileStream
        expected = new FileStream(@"M:\work\TestA1.txt", FileMode.Open),
        actual = new FileStream(@"M:\work\TestA2.txt", FileMode.Open))
    {
        FileAssert.AreEqual(expected, actual);
    }

    // Test OK.
    FileAssert.AreEqual(
        new FileInfo(@"M:\work\TestA1.txt"), 
        new FileInfo(@"M:\work\TestA2.txt"));
    
    // Test OK.
    FileAssert.AreEqual(
        @"M:\work\TestA1.txt", 
        @"M:\work\TestA2.txt");
} 
```
上記のように引数にFileStream型、FileInfo型、もしくはstring型のファイルパスを指定することが可能。
上記例だとファイルのTestA1.txtとTestA2.txtの内容が一致していれば、テストOKとなる。

```C#
[TestCase]
public void BinaryFileAreEqualTest()
{
    // Test OK.
    FileAssert.AreEqual(
        @"M:\work\TestA1.jpg", 
        @"M:\work\TestA2.jpg");
}
```
テキストファイルだけではなく、バイナリファイルも検査できる。

## 2. Exists、DoesNotExistメソッド
Existsメソッドは、指定したファイルが存在することを検査する。
DoesNotExistメソッドは、その逆の判定を行う。

```C#
[TestCase]
public void FileExistsTest()
{
    // Test OK.
    FileAssert.Exists(new FileInfo(@"M:\work\TestA1.txt"));

    // Test OK.
    FileAssert.Exists(@"M:\work\TestA1.jpg");
}
```
引数にFileInfo型、もしくはstring型のファイルパスを指定することが可能。
FileStream型が無いのは、ファイルが存在しなかった場合、FileStream型のオブジェクトを生成する段階でFileNotFoundExceptionが発生するからだろう。


# DirectoryAssertクラス
NUnitのClassicModelのアサーションクラスの1つ。
クラス名の通り、ディレクトリを検査する。

## 1. AreEqual、AreNotEqualメソッド
AreEqualメソッドは、2つのディレクトリが同じであることを検査する。
AreNotEqualメソッドは、その逆の判定を行う。

```C#
[TestCase]
public void DirectoryAreEqualTest()
{
    // Test OK.
    DirectoryAssert.AreEqual(
        new DirectoryInfo(@"M:\work\TestA1"), 
        new DirectoryInfo(@"M:\work\TestA1"));

    // Test NG. (ディレクトリ配下のファイル内容は同じ)
    DirectoryAssert.AreEqual(
        new DirectoryInfo(@"M:\work\TestA1"), 
        new DirectoryInfo(@"M:\work\TestA2"));
}
```
引数はDirectoryInfo型のみ指定可能。
ディレクトリそのものを検査するので、ディレクトリ配下のファイル内容が全く同じ内容であっても、異なるディレクトリを指定するとAreEqualメソッドはテストNG、AreNotEqualメソッドはテストOKとなる。

## 2. Exists、DoesNotExistメソッド
Existsメソッドは、指定したディレクトリが存在することを検査する。
DoesNotExistメソッドは、その逆の判定を行う。

```C#
[TestCase]
public void DirectoryExistsTest()
{
    // Test OK.
    DirectoryAssert.Exists(new DirectoryInfo(@"M:\work\TestA1"));

    // Test OK.
    DirectoryAssert.Exists(@"M:\work\TestA1");
}
```
AreEqualメソッドとは異なり、こちらはstring型での指定も可能。


# まとめ
ClasicModelのアサーションメソッドは一通り試してみた。
[[.NET][C#]NUnitのClassic Modelアサーションメソッド一覧](https://qiita.com/suganury/items/9f2c3af979ca071726f2) ※Assertクラス
[[.NET][C#]NUnitのStringAssertアサーションメソッド一覧](https://qiita.com/suganury/items/e6d9e87ba7f23bfb15a7)
[[.NET][C#]NUnitのCollectionAssertアサーションメソッド一覧](https://qiita.com/suganury/items/442dccf2b99f790a9354)
[[.NET][C#]NUnitのFileAssert・DirectoryAssertアサーションメソッド一覧](https://qiita.com/suganury/items/1e2cf02a08c759bb4c63)

なお、ConstraintModelでは`Assert.Thatメソッド`一つで
上記アサーションクラスの制約（テスト判定条件）を全て表現できる。
(記事にしたりするかは保留:kissing:)

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