测试使用SoftReference <t> </t>的代码

时间:2010-05-11 20:01:25

标签: java soft-references

要获得SoftReference<T>的任何代码进行全面测试,必须想出一些方法来测试'是的,它是否为空“的情况。通过使用'for-test'代码路径强制引用为null,可能会或多或少地模仿这一点,但这不会像GC那样完全管理队列。我想知道是否有人可以分享设置可重复,受控环境的经验,其中GC实际上是在收集和归零时引发的?

2 个答案:

答案 0 :(得分:3)

我会将问题分成两部分:

  1. 返回null时测试代码路径。
  2. 测试SoftReference。
  3. 对于#1,我会使用一个Mock,它返回null并且有足够的变化(有时是null,有时是真实对象)来测试你认为你将使用GC的所有相关场景。那将是单元测试。

    接下来是一个集成测试,看看GC的行为WRT SoftReference是否符合您的预期。我不确定我是否会努力完全自动化这样的测试,除非可能是更大的负载测试环境,但如果这很重要,我会调整一个具有非常紧密的最大内存量和负载的JVM足够的内存来触发软参考收集。失败的路径是让代码不使用软引用,加载的内存应该导致OutOfMemory错误。然后通过转换为软引用来使测试通过。测试的目的应该是断言单元测试中对行为的假设。

答案 1 :(得分:3)

This answer解释了如何使用“完全记忆”强制垃圾收集。通过尝试分配比你更多的东西,这将失败,但直到所有SoftReference都被清理。