1

안드로이드 서비스 구현을위한 JUnit 테스트 코드를 작성 중이며 sdcard에 복사 된 일부 파일로 테스트를 초기화해야합니다. 내 클래스의 서명은 다음과 같이이다 : 나는 자산에서 파일을 복사 할 this 팁을 사용하기 위해 노력하고있어,하지만에 getAssets() 메소드가 필요로 활동 클래스를 확장안드로이드에서 setUp 메소드의 에셋에서 파일을 복사하는 방법 Junit ServiceTestCase?

public class ImageServiceTest extends ServiceTestCase<ImageService> 

.

그래서 .. 자산에서 sdcard로 파일을 복사하여 안드로이드에서 junit 테스트를 어떻게 설정할 수 있습니까?

고맙습니다.

추신 :

'. getSystemContext()에 getAssets();', '.는 getContext()에 getAssets(); ","getApplicationContext(); " 테스트 프로젝트 컨텍스트가 아닌 서비스 프로젝트 컨텍스트를 반환합니다.

이제는 Instrumentation을 사용하려하지만 Activity가 필요하며 서비스 프로젝트를 진행하고 있습니다. 나는 당신이 할 수있는 ... 액티비티없이 계측을 사용하는 방법을

답변

6

좋아, 꽤 쉬웠다.

내 큰 문제는 테스트 프로젝트에서 컨텍스트를 가져 와서 자산 폴더에 액세스하는 것이 었습니다. 그러나 getContext()는 주 프로젝트 컨텍스트를 반환합니다.

Context mTestAppContext = getContext().createPackageContext("com.project.test", 
       Context.CONTEXT_IGNORE_SECURITY); 

:-)

+0

감사 : http://www.mail-archive.com/[email protected]/msg140899.html – cassioso

+1

예! 답변입니다. – pierrotlefou

1

을 찾고 있어요 :

protected void setUp() throws Exception { 
    super.setUp(); 
    AssetManager assets = getSystemContext().getAssets(); 
    InputStream input = assets.open("file.txt"); 
    assertNotNull(input); 
} 

하지만이 경우 자산이 서비스의 주요 프로젝트에 있어야합니다 것을 고려.

+0

감사합니다. dtmilano! 하지만 말하기를 잊어 버렸습니다. 리소스는 테스트 프로젝트에 있어야합니다. – cassioso

0

숨겨진 방법도 있습니다, AndroidTestCase에서, 필요한 것을 제공 : 그래서, 테스트 프로젝트 컨텍스트를 얻기 위해 나는 테스트 패키지를 통과하는 새로운 컨텍스트를 만듭니다. exposed with introspection 일 수 있습니다.

private Context getTestContext() throws Exception 
{ 
    return (Context)getClass().getMethod("getTestContext").invoke(this); 
} 
관련 문제