gpt4 book ai didi

java - 如何对使用文件锁的 java 方法进行单元测试?

转载 作者:太空宇宙 更新时间:2023-11-04 06:23:39 24 4
gpt4 key购买 nike

假设我有以下代码:

public boolean canLock(Path path) throws IOException {
try(FileChannel byteChannel = FileChannel.open(path);
FileLock lock = byteChannel.tryLock()) {
return lock != null;
}
}

当然,这段代码有点无用,它只是为了尽可能紧凑地说明问题。

现在我想对这个方法进行单元测试:我想测试如果文件被另一个进程锁定,结果是否为假。类似这样的事情:

public void canLock_returnsFalse_ifFileIsLocked() {
// setup
Path tmpPath = createTmpPath();
FileLock lock = lock(tmpPath);

// execution
boolean actual = canLock(tmpPath);

// evaluation
assertFalse(actual);
}

现在问题来了:documentation说:

[tryLock()] returns null if the lock could not be acquired because another program holds an overlapping lock

throws OverlappingFileLockException - If a lock that overlaps the requested region is already held by this Java virtual machine, or if another thread is already blocked in this method and is attempting to lock an overlapping region of the same file

这意味着如果锁是由我自己的进程创建的,则行为会显着不同,因此我的单元测试有问题。如何以单元测试通常可接受的方式从不同的进程创建锁(可移植、可靠、快速、简单)。

最佳答案

似乎您需要使用 JMockit 或 PowerMock 来模拟对 FileChannel.open 的调用,以便它返回一个模拟的 FileChannel。

JMockit mock static method

关于java - 如何对使用文件锁的 java 方法进行单元测试?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27109365/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com