2013-01-22 2 views
0

실행 가능한 .jar 파일 내부에서 실행되는 Robolectric 테스트를 실행하려고합니다. Robolectric requires 당신은 안드로이드Manifest.xml 파일이 들어있는 디렉토리를 사용하여 파일을 생성자로 전달해야합니다. 내 AndroidManifest.xml 파일은 내 .jar 파일의 루트에 있으며 테스트 러너는 com.some.package와 같은 패키지에 있습니다. 이것을 어떻게 할 수 있습니까? .jar 파일의 루트를 기준으로 디렉토리를 나타내는 File 객체를 만듭니다.

나는 다음과 같은 시도 :

public class CustomTestRunner extends RobolectricTestRunner { 
    public CustomTestRunner(Class testClass) throws InitializationError, URISyntaxException { 
     super(testClass, new File(CustomTestRunner.class.getResource("/AndroidManifest.xml").getPath().replace("AndroidManifest.xml", ""))); 
    } 
} 

작동하지 않는, 그것은 Robolectric이 불만을 실행할 때, 그리고 나는이 FileNotFoundException이 얻을 :

java.io.FileNotFoundException : /사용자/christopherperry/데스크탑/파일 : /Users/christopherperry/Desktop/my-executable-jar.jar! /AndroidManifest.xml 파일을 찾을 수 없거나 파일이 없습니다. 그것은 com.xtremelabs.robolectric.RobolectricTestRunner.createResourceLoader (RobolectricTestRunner.java:602)에서 com.xtremelabs.robolectric.RobolectricConfig.validate (RobolectricConfig.java:73)

에서 프로젝트의 AndroidManifest.xml을 가리켜 야합니다

AndroidManifest.xml 파일이 jar 파일의 루트에 있고 오류 메시지에서 찾고있는 것으로 보이는 때문에 이해가 안됩니다.

답변

0

JAR 파일의 항목 자체는 파일이 아니므로 "사용자 수 없음"입니다.

Class.getResource()에서 가져온 URL 또는 Class.getResourceAsStream()에서 가져온 스트림을 통해 액세스 할 수 있습니다.

+0

그래서 기본적으로, 나는 f'ed. –

+0

@ChristopherPerry JAR 파일은 파일 시스템이 아닙니다. 그것이 당신의 의도라면, 그 (것)들을 완전히 재건하지 않고 쓸 수는 없습니다. 요구 사항을 다시 생각해보십시오. – EJP

+0

항아리에 쓰려고하지 않고 내 문제를 다시 읽으십시오. Robolectric은 항아리 안에 포장 된 파일을 읽으려고합니다. 그것은 내 것이 아니라 Robolectric의 요구 사항입니다. –

관련 문제