gpt4 book ai didi

java - 如何对与 Thread.interrupt 一起使用的代码进行可重复的单元测试?

转载 作者:行者123 更新时间:2023-11-30 01:39:42 24 4
gpt4 key购买 nike

考虑一些调用的代码,例如

 file = new RandomAccessFile(x, "r");
file.getChannel().map(....)

并且想要处理 ClosedByInterruptException 情况。我对如何进行现实的、可重复的单元测试感到困惑。

为了进行测试,我需要以某种方式将此线程与其他线程同步,并导致其他线程在正确的时间调用 Thread#interrupt。然而,所有等待原语都是可中断的,并且可以清除中断。

现在,我在正在测试的代码中得到了 Thread.currentThread().interrupt (按照单元测试的要求),但这与实际的异步中断并不完全相同,是吗?

最佳答案

您感兴趣的测试是异常的处理,而不是创建异常的细节。您可以将相关代码移至另一个方法中,然后重写该方法进行测试并抛出相关异常。然后,您就可以测试结果,而不必担心线程问题。

例如:

public class Foo {
/**
* default scope so it is visible to the test
*/
void doMapping(RandomAccessFile raf) throws ClosedByInterruptException {
file.getChannel().map(....);
}

public void processFile(File x) {
RandomAccessFile raf = new RandomAccessFile(x, "r");
doMapping(raf);
}
...
}

public class FooTest {
@Test
void testProcessFile() {
Foo foo = new Foo() {
@Override
void doMapping(RandomAccessFile raf) throws ClosedByInterruptException {
throw new ClosedByInterruptException(...);
}
};

...
}
}

关于java - 如何对与 Thread.interrupt 一起使用的代码进行可重复的单元测试?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1165400/

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