2010-05-11 5 views
4

코드를 SoftReference<T>으로 완전히 테스트하려면 '넌 그래, 끝났어.'테스트 할 수있는 방법이 필요합니다. 하나는 'for-test'코드 경로를 사용하여 참조가 null이되도록 강요하지만 GC가 수행하는 것과 똑같이 큐를 관리하지 않습니다. 만약 누군가가 밖으로 반복 설정, 제어, 환경, GC는, 사실, 수집 및 nulling로 자극에 경험을 공유 할 수 있을까?SoftReference를 사용하는 테스트 코드

+0

정식 단위 테스트는 한 번도하지 않았지만 코드를 체크 아웃 한 방식은 OutOfMemoryError에 맞고, SoftReferences를 사용하고 다시 실행하도록 코드를 변경하는 시나리오를 실행하는 것이 었습니다. –

+1

반복 가능 및 GC? 어려워 질 것입니다. –

답변

3

나는 두 부분으로 문제를 끊을 : 널 (null)이

  1. 테스트 코드 경로를 반환 될 때를.
  2. SoftReference 테스트.

# 1에서는 GC가 있다고 생각하는 모든 관련 시나리오를 테스트하기 위해 충분히 변형 된 (null, 때로는 실제 객체) null을 반환하는 모의를 사용합니다. 그것은 단위 테스트 것입니다.

다음은 실제로 GC의 동작 WRT SoftReference가 원하는대로 있는지 확인하기위한 통합 테스트입니다. 로드 테스트의 큰 맥락을 제외하고는 그러한 테스트를 완전히 자동화하기위한 노력에 착수 할 것인지 확신 할 수 없지만, 이것이 중요한 경우 최대 용량의 메모리와로드로 JVM을 가동시킬 것입니다. 소프트 레퍼런스 수집을 시작하기에 충분한 메모리. 오류가 발생한 경로는 코드가 소프트 참조를 사용하지 않는 것입니다.로드 된 메모리가 OutOfMemory 오류를 발생시켜야합니다. 그런 다음 소프트 참조로 변환하여 테스트를 통과시킵니다. 시험의 목적은 단위 테스트에서 행동에 대한 가정을 주장하는 것입니다.

3

This answer은 '전체 메모리'로 가비지 수집을 강제 수행하는 방법을 설명합니다. 네가 가진 것 이상을 할당하려고하면 실패 할 것이다. 그러나 모두 SoftReference이 정리 될 때까지는 실패 할 것이다.