You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何测试获取文件创建时间的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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.05 06:15:01