0
0

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 1 year has passed since last update.

【Assertj】あまり知られてないアサーションメソッドPath編

Last updated at Posted at 2023-07-31

はじめに

みなさん、単体テストを書くときにどのアサーションを使うか考えていますか?
おそらく多くの方がしっかりと考えて書いていると思います。
まさかisEqualToしか使ってないなんてことはないですよね?
ここではPathインターフェースを対象としたアサーションメソッドを紹介します。

ここではアサーションメソッドのみを紹介します。
テストに関するベストプラクティスなどには触れません。

環境について

  • Java17
  • SpringBoot 3.1.2
  • spring-boot-starter-test
    • JUnit 5.9.3
    • assertJ 3.24.2

AbstractPathAssert

assertThatにPathを指定するとこのAssertクラスが返されます。
java.nio.file.Pathに含まれるメソッドに近いものを一通りカバーしています。

exists()

対象のパスが存在することをテストするアサーション。

exists
@Test
public void path() {

    var exists = Path.of("C:\\home", "user", "exists");
    var notExist = Path.of("C:\\home", "user", "notExists");
    
    // 成功
    assertThat(exists).exists();

    // 失敗
    assertThat(notExist).exists();
}
exists 失敗時のメッセージ
java.lang.AssertionError: 
Expecting path:
  C:\home\user\exists
to exist (symbolic links were followed)

doesNotExist()

対象のパスが存在しないことをテストするアサーション。

doesNotExist
@Test
public void path() {

    var exists = Path.of("C:\\home", "user", "exists");
    var notExist = Path.of("C:\\home", "user", "notExists");
    
    // 成功
    assertThat(notExist).doesNotExist();

    // 失敗
    assertThat(exists).doesNotExist();
}
doesNotExist 失敗時のメッセージ
java.lang.AssertionError: 
Expecting path:
  C:\home\user\notExists
not to exist

isAbsolute()

対象のパスが絶対パスであるかテストするアサーション。
実際に存在するかは問わない。存在しないフォルダ、ファイルでもOK。

isAbsolute
@Test
public void path() {
    var absolutePath = Path.of("C:\\home", "user", "absolute");
    var unnormalizedAbsolutePath = Path.of("C:\\home", "user", "..", "absolute");
    var relativePath = Path.of("..", "user", "example");

    // 成功
    assertThat(absolutePath).isAbsolute();
    assertThat(unnormalizedAbsolutePath).isAbsolute();

    // 失敗
    assertThat(relativePath).isAbsolute();
}
isAbsolute 失敗時のメッセージ
java.lang.AssertionError: 
Expecting actual:
  ..\user\example
to be an absolute path.

isRelative()

対象のパスが相対パスであるかテストするアサーション。
ちょうどisAbsoluteの逆。
isAbsoluteと同じく実際に存在するかは問わない。

isRelative
@Test
public void path() {
    var absolutePath = Path.of("C:\\home", "user", "absolute");
    var relativePath = Path.of("..", "user", "example");

    // 成功
    assertThat(relativePath).isRelative();

    // 失敗
    assertThat(absolutePath).isRelative();
}
isRelative 失敗時のメッセージ
java.lang.AssertionError: 
Expecting actual:
  C:\home\user\absolute
to be a relative path.

isNormalized()

対象のパスが正規化されているかテストするアサーション。
isAbsoluteやisRelativeと同じく実際に存在するかは問わない。

isNormalized
@Test
public void path() {
    var absolutePath = Path.of("C:\\home", "user", "absolute");
    var unnormalizedAbsolutePath = Path.of("C:\\home", "user", "..", "absolute");
    var normalizedPath = Path.of("user", "example");

    // 成功
    assertThat(normalizedPath).isNormalized();
    assertThat(absolutePath).isNormalized();

    // 失敗
    assertThat(unnormalizedAbsolutePath).isNormalized();
}
isNormalized 失敗時のメッセージ
java.lang.AssertionError: 
Expected path:
  C:\home\user\..\absolute
to be normalized.

感想

ファイルの入出力はよくある内容かと思います。
適切なアサーションを使ってコードを綺麗に、メッセージもわかりやすいものを出していきたいですね。

参考

0
0
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
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?