符号链接路径总是从/private/开始



我编写了一个函数,该函数创建一个指向给定父目录中特定目录的符号链接。它不直接创建链接,而是创建一个tmp链接,然后将tmp链接移动到所需的路径,因为移动操作是原子的,而覆盖操作不是。

public static void updateMySymlink(final Path parentDir, final String targetDirName) {
final Path targetPath = parentDir.resolve(targetDirName);
final Path tempPath = parentDir.resolve("tmp");
final Path symlinkPath = parentDir.resolve("mySymlink");
Files.createSymbolicLink(tempPath, targetPath);
Files.move(tempPath, symlinkPath, ATOMIC_MOVE);
}

当我试着对它进行单元测试时,我写了这样一个测试:

@Test
public void testSymlinkCreation() {
final Path targetPath = localRepoPath.resolve("target");
final Path symlinkPath = localRepoPath.resolve("mySymlink");
FileUtils.forceMkdir(targetPath.toFile());
updateMySymlink(localRepoPath, "testCommitId1"); // static method
assertThat(targetPath).isEqualTo(symlinkPath.toRealPath());
}

测试失败,提示:

org.junit.ComparisonFailure: expected:</[private/]tmp/testDirToCreate-...> but was:</[]tmp/testDirToCreate-...>

无论输入路径如何改变,这个private/保持不变。我尝试断言绝对路径或归一化后的路径,但仍然因为相同的错误而失败。

我的问题是,这个private/来自哪里?

发现问题是我只在symlinkPath上使用.toRealPath()。将断言修改为:

assertThat(targetPath.toRealPath()).isEqualTo(symlinkPath.toRealPath());

解决了问题。

相关内容

  • 没有找到相关文章

最新更新