0
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

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

Last updated at Posted at 2020-10-17

はじめに

前回、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メソッドは、その逆の判定を行う。

[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となる。

[TestCase]
public void BinaryFileAreEqualTest()
{
    // Test OK.
    FileAssert.AreEqual(
        @"M:\work\TestA1.jpg", 
        @"M:\work\TestA2.jpg");
}

テキストファイルだけではなく、バイナリファイルも検査できる。

2. Exists、DoesNotExistメソッド

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

[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メソッドは、その逆の判定を行う。

[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メソッドは、その逆の判定を行う。

[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アサーションメソッド一覧 ※Assertクラス
[.NET][C#]NUnitのStringAssertアサーションメソッド一覧
[.NET][C#]NUnitのCollectionAssertアサーションメソッド一覧
[.NET][C#]NUnitのFileAssert・DirectoryAssertアサーションメソッド一覧

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

参考

NUnit公式:FileAssert
NUnit公式:DirectoryAssert

0
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?