【Java】ファイル入出力のテスト

IT

やりたかったこと

  • ファイル入出力を伴うテスト

    • 環境に依存せずファイル入出力の処理をしたい
    • 一時ファイルを作成し、テスト後はそのファイルを削除したい
  • 使用したもの

    • JUnitの@TempDir

サンプルコードと結果

サンプルコード

ファイルの読み書きにObjectInputStreamMARKDOWN_HASH81de0c38c16a53050508e257f8e97341MARKDOWNHASHを使用したのはなんでも良かったけど、自分が書くのに一番早かったため(^^;)

今回のテスト対象クラス

import java.io.*;

public class FileIO {
    public FileIO(){}

    public void writeFile(String filePath) throws IOException {
        ObjectOutputStream objOut = new ObjectOutputStream(new FileOutputStream(filePath));
        objOut.writeObject("test");
        objOut.close();

    }

    public String readFile(String filePath) throws IOException, ClassNotFoundException {
        ObjectInputStream objIn = new ObjectInputStream(new FileInputStream(filePath));
        Object obj = objIn.readObject();
        objIn.close();
        return obj.toString();
    }
}

テスト対象クラスを呼び出すmainコード

import java.io.File;
import java.io.IOException;

public class main {
    public static void main(String[] args) throws IOException, ClassNotFoundException {
        File filePath = new File("./test.txt");
        FileIO fileIO = new FileIO();

        fileIO.writeFile(filePath.toString());
        System.out.println(fileIO.readFile(filePath.toString()));
    }
}

実行結果

実装したテストコード

import org.junit.jupiter.api.io.TempDir;

import java.io.File;
import java.io.IOException;
import java.nio.file.Path;

public class FileIOTest {
    @Test
    void fileIOTest(@TempDir Path tempDir) throws IOException, ClassNotFoundException {
        FileIO fileIOTest = new FileIO();
        File tempFile = tempDir.resolve("test.txt").toFile();

        fileIOTest.writeFile(tempFile.toString());
        Assertions.assertEquals("test", fileIOTest.readFile(tempFile.toString()));
    }
}

テストはwriteFilereadFileを同時に行った

  • 一時ファイルを用意
  • writeFileを使用して、一時ファイルに書き込み
  • 書き込んだファイルを読み込み、文字列が意図したものであることを確認

参考

コメント

タイトルとURLをコピーしました