やりたかったこと
-
ファイル入出力を伴うテスト
- 環境に依存せずファイル入出力の処理をしたい
- 一時ファイルを作成し、テスト後はそのファイルを削除したい
-
使用したもの
- 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を使用して、一時ファイルに書き込み
- 書き込んだファイルを読み込み、文字列が意図したものであることを確認
コメント