如何在不使用模拟睡眠流的情况下测试IO性能非常差的应用程序代码的行为(因为它们会对中断做出反应)?如何在Java中测试IO问题?
例如,我想测试一个ConcurrentWrapper
实用程序,该实用程序具有用于文件IO的线程池。它将每个操作提交到invokeAll()
带有超时的ExecutorService
。我想确认不仅在超时前退出ConcurrentWrapper
的呼叫,而且它也以某种方式使其内部ExecutorService
的线程终止(以避免泄漏)。
我需要以某种方式模拟内部线程中的缓慢IO,但以某种方式忽略中断(如真正的IO)。
澄清的一点:没有答案,如“睡眠和吞咽InterruptedException
”或“休眠,抓InterruptedException
并回去睡觉”是可以接受的。我想测试我的代码如何处理中断,而这种工具通过处理它们本身来击败目标。
让它睡了一段指定的时间,如果它早早醒来,回去睡觉? –
所以你想要一个线程阻塞(模拟慢IO),然后抛出一个中断的异常,但继续阻塞(模拟IO继续执行)?这没有多大意义。随着时间的推移,一个方法调用阻塞,返回或抛出异常;它不能做三分之二。你能更清楚你想完成什么吗? –
我在第二段中描述了用例 - 为限制调用持续时间的包装器/帮助器编写测试,不仅验证调用完成,还验证它不会在内部池中泄漏,因为任务仍在运行在后台线程。 –