【发布时间】:2011-01-29 06:18:15
【问题描述】:
具体来说,我正在尝试为需要使用File.separatorChar 在 Windows 和 unix 上构建路径的方法创建单元测试。代码必须在两个平台上运行,但是当我尝试更改这个静态 final 字段时,我遇到了 JUnit 错误。
有人知道发生了什么吗?
Field field = java.io.File.class.getDeclaredField( "separatorChar" );
field.setAccessible(true);
field.setChar(java.io.File.class,'/');
当我这样做时,我得到
IllegalAccessException: Can not set static final char field java.io.File.separatorChar to java.lang.Character
想法?
【问题讨论】:
-
最好在其他目标操作系统下的 VirtualBox 环境中运行单元测试。谁知道当你像这样弄乱 JVM 时会发生什么。此外,也许可以重写您的代码以不直接使用 File.separatorChar。例如,您可以使用 File(parentFile, name) 构造函数构建路径。
-
@Thilo:这是个好主意,现在我想起来了,可能有一种方法可以跨平台运行我的逻辑,而无需处理文件 URL。但是,我认为知道如何更改 java.io.File.separatorChar 对于其他一些合法用例来说是一件有用的事情。
标签: java unit-testing reflection file-io