2017-12-24 8 views
1

선택적 dependency의 가용성에 따라 다르게 동작하는 코드가 있습니다 (Class.forName(...) 참조).선택적 종속성을 기반으로 동작을 확인하는 방법

junit에서이 동작을 확인할 수 있습니까? 아니면이를 촉진하는 라이브러리가 있습니까?

사용자 정의 클래스 로더를 사용하여 새 junit 프로세스를 부트 스트랩하는 것보다 더 좋은 방법이 있기를 바랍니다.

또는 클래스 이름을 반환하는 메소드를 조롱하여 검사 할 수 있습니다. 그런 다음 테스트에서 나는 더미 클래스 또는 실제 클래스를 사용할 수 있습니다. 여전히 필자는 누락 된 선택적 종속성을 사용하여 '실제'테스트를 선호합니다.

답변

1

사용자 정의 클래스 로더를 작성하면 해당 클래스/메소드에 제공되는 클래스 경로를 완벽하게 제어하여 특정 클래스의 존재 여부를 확인하여 동작을 조정해야합니다.

Spark library에서이 코드를 확인하면 클래스 경로를 동적으로 변경하고 선택적으로 클래스 경로 확인의 기본 순서 (일반적으로 상위 우선)를 바꿀 수 있습니다. 이러한 전략을 사용하면 쉽게 필요한 경우, 당신도 JavaCompiler를 사용하여 즉석에서 합성 클래스를 생성 할 수 있습니다

ClassLoader classLoader = Thread.currentThread().getContextClassLoader() 
ClassLoader mutableClassLoader = new MutableURLClassLoader(urls, classLoader); 
// ... manipulate the classpath in mutableClassLoader ... 
Thread.currentThread().setContextClassLoader(mutableClassLoader); 
// everything is set up, you can now call the method you want to test 

처럼 문을 사용하여 클래스 경로를 조롱 할 수있다.