如何测试获取文件创建时间的Java方法 自定义设置文件创建时间
自定义文件创建时间的测试实现方案
Java NIO包本身提供了修改文件基础属性的能力,你不需要额外引入第三方依赖,直接配合TemporaryFolder的临时文件完成测试即可,具体步骤和代码示例如下:
实现步骤
- 借助
TemporaryFolder(JUnit4规则)或@TempDir(JUnit5扩展)创建临时测试文件,无需手动管理测试文件的清理 - 构造你期望测试的目标创建时间,转换为
FileTime类型 - 调用
Files.setAttribute()方法,修改临时文件的basic:creationTime属性为你构造的目标时间 - 调用你开发的
getFileCreationDate方法,将返回值与你指定的目标时间做断言校验即可
完整测试代码示例
JUnit4 版本
import org.junit.Rule; import org.junit.Test; import org.junit.rules.TemporaryFolder; import java.io.File; import java.nio.file.Files; import java.nio.file.attribute.BasicFileAttributeView; import java.nio.file.attribute.FileTime; import static org.junit.Assert.assertEquals; public class FileUtilTest { // 替换为你自己的工具类实例 private final FileUtil fileUtil = new FileUtil(); @Rule public TemporaryFolder temporaryFolder = new TemporaryFolder(); @Test public void testGetFileCreationDate() throws Exception { // 1. 创建临时测试文件 File testFile = temporaryFolder.newFile("test-create-time.txt"); // 2. 定义你要指定的创建时间(示例为2024-01-01 00:00:00的毫秒值) long expectedCreateTime = 1704067200000L; FileTime targetTime = FileTime.fromMillis(expectedCreateTime); // 3. 修改文件的创建时间属性 Files.getFileAttributeView(testFile.toPath(), BasicFileAttributeView.class) .setTimes(null, null, targetTime); // 4. 调用方法并断言 Long actualTime = fileUtil.getFileCreationDate(testFile); assertEquals(expectedCreateTime, actualTime.longValue()); } @Test public void testGetFileCreationDateReturnZeroWhenIoError() { // 构造不存在的文件模拟IO异常场景,覆盖异常分支 File notExistFile = new File("not-exist-file-12345.txt"); Long result = fileUtil.getFileCreationDate(notExistFile); assertEquals(0L, result.longValue()); } }
JUnit5 版本
import org.junit.jupiter.api.Test; import org.junit.jupiter.api.io.TempDir; import java.io.File; import java.nio.file.Files; import java.nio.file.Path; import java.nio.file.attribute.BasicFileAttributeView; import java.nio.file.attribute.FileTime; import static org.junit.jupiter.api.Assertions.assertEquals; public class FileUtilTest { private final FileUtil fileUtil = new FileUtil(); @Test public void testGetFileCreationDate(@TempDir Path tempDir) throws Exception { // 1. 创建临时测试文件 Path testFilePath = tempDir.resolve("test-create-time.txt"); Files.createFile(testFilePath); File testFile = testFilePath.toFile(); // 2. 定义目标创建时间 long expectedCreateTime = 1704067200000L; FileTime targetTime = FileTime.fromMillis(expectedCreateTime); // 3. 修改创建时间 Files.getFileAttributeView(testFilePath, BasicFileAttributeView.class) .setTimes(null, null, targetTime); // 4. 断言 Long actualTime = fileUtil.getFileCreationDate(testFile); assertEquals(expectedCreateTime, actualTime); } }
注意事项
- 部分低版本Linux系统默认关闭了文件创建时间(crtime)的存储,如果测试运行在这类环境上,修改创建时间的操作会不生效,你可以在测试前先判断当前系统是否支持读取创建时间,不支持的话跳过对应测试用例即可
内容的提问来源于stack exchange,提问作者Lulex97
相关产品推荐
相关产品推荐

