2016-07-23 2 views
7

Android Studio에서 Android Instrumentation 클래스를 만들려고 노력 중이므로 ormlite 클래스를 테스트 할 수 있습니다. orkite에 대한 DBHelper 클래스는 ormlite 구성 파일에서 읽어야합니다.이 파일은 res/raw/ormlite_config.txt이고 R.raw.ormlite_config을 사용하여 액세스합니다.Android Instrumentation jUnit 테스트에서 R.raw 리소스에 액세스

DBHelper의 수퍼 클래스 생성자가 int 리소스를 원하기 때문에 내가 얻으려고 openRawResource(R.raw.ormlite_config)을 사용하는 것이 아닙니다. 나는 내 테스트를 실행하면

, 그것은 비록 그것을 찾을 수 없습니다 :

android.content.res.Resources$NotFoundException: Resource ID #0x7f090001 
at android.content.res.Resources.getValue(Resources.java:1266) 
at android.content.res.Resources.openRawResource(Resources.java:1181) 
at android.content.res.Resources.openRawResource(Resources.java:1158) 
at com.j256.ormlite.android.apptools.OrmLiteSqliteOpenHelper.openFileId(OrmLiteSqliteOpenHelper.java:310) 
at com.j256.ormlite.android.apptools.OrmLiteSqliteOpenHelper.<init>(OrmLiteSqliteOpenHelper.java:76) 
at com.inadaydevelopment.herdboss.DB.<init>(DB.java:40) 
at com.inadaydevelopment.herdboss.DB.shared(DB.java:31) 
at com.inadaydevelopment.herdboss.ORMLiteTest.setup(ORMLiteTest.java:29) 
... 
at android.support.test.internal.runner.TestExecutor.execute(TestExecutor.java:59) 
at android.support.test.runner.AndroidJUnitRunner.onStart(AndroidJUnitRunner.java:262) 
at android.app.Instrumentation$InstrumentationThread.run(Instrumentation.java:1853) 

Tests ran to completion. 

DBHelper : 여기 android.content.res.Resources$NotFoundException: Resource ID #0x7f090001

전체 스택 트레이스의

public class DBHelper extends OrmLiteSqliteOpenHelper { 
    public DBHelper(Context context) { 
     super(context, DATABASE_NAME, null, DATABASE_VERSION, R.raw.ormlite_config); 
    } 
} 

내 jUnit 테스트 케이스 :

@RunWith(AndroidJUnit4.class) 
public class ORMLiteTest { 
    @Before 
    public void setup() { 
     DB.shared(InstrumentationRegistry.getContext()); 
    } 
} 

는 Commonsware의 답을 고정 :

@RunWith(AndroidJUnit4.class) 
public class ORMLiteTest { 
    @Before 
    public void setup() { 
     DB.shared(InstrumentationRegistry.getTargetContext()); 
    } 
} 

답변

9

getContext()androidTest/ 소스 세트에서 자원에 Context 포인팅을 반환합니다. 리소스가 실제 앱 자체에있는 경우 getTargetContext()을 사용합니다 (예 : main/ 소스 세트).

관련 문제