やりたかったこと
- 
ファイル入出力を伴うテスト - 環境に依存せずファイル入出力の処理をしたい
- 一時ファイルを作成し、テスト後はそのファイルを削除したい
 
- 
使用したもの - JUnitの@TempDir
 
- JUnitの
サンプルコードと結果
サンプルコード
ファイルの読み書きにObjectInputStream、MARKDOWN_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()));
    }
}テストはwriteFileとreadFileを同時に行った
- 一時ファイルを用意
- writeFileを使用して、一時ファイルに書き込み
- 書き込んだファイルを読み込み、文字列が意図したものであることを確認
 
  
  
  
  

コメント