[android] Android junit 테스트 케이스에서 테스트 프로젝트의 컨텍스트 가져 오기
누구든지 Android junit 테스트 케이스에서 테스트 프로젝트 의 컨텍스트를 얻는 방법을 알고 있습니까 (AndroidTestCase 확장).
참고 : 테스트는 계측 테스트가 아닙니다.
참고 2 : 테스트되는 실제 애플리케이션의 컨텍스트가 아니라 테스트 프로젝트의 컨텍스트가 필요합니다.
테스트 프로젝트의 자산에서 일부 파일을로드하려면 이것이 필요합니다.
답변
Android 테스트 지원 라이브러리 (현재 androidx.test:runner:1.1.1
)에 새로운 접근 방식이 있습니다 . Kotlin 업데이트 예 :
class ExampleInstrumentedTest {
lateinit var instrumentationContext: Context
@Before
fun setup() {
instrumentationContext = InstrumentationRegistry.getInstrumentation().context
}
@Test
fun someTest() {
TODO()
}
}
앱 컨텍스트도 실행하려면 다음을 수행하십시오.
InstrumentationRegistry.getInstrumentation().targetContext
전체 실행 예제 : https://github.com/fada21/AndroidTestContextExample
여기를보세요 : getTargetContext ()와 getContext (IntrumentationRegistry에서)의 차이점은 무엇입니까?
답변
몇 가지 연구 후에 유일한 해결책은 yorkw가 이미 지적한 것입니다. InstrumentationTestCase를 확장 한 다음 getInstrumentation (). getContext ()를 사용하여 테스트 애플리케이션의 컨텍스트에 액세스 할 수 있습니다. 다음은 위의 제안을 사용한 간단한 코드 스 니펫입니다.
public class PrintoutPullParserTest extends InstrumentationTestCase {
public void testParsing() throws Exception {
PrintoutPullParser parser = new PrintoutPullParser();
parser.parse(getInstrumentation().getContext().getResources().getXml(R.xml.printer_configuration));
}
}
답변
당신이 읽을 수있는 것처럼 AndroidTestCase 소스 코드 의 getTestContext()
방법은 숨겨져 있습니다.
/**
* @hide
*/
public Context getTestContext() {
return mTestContext;
}
@hide
리플렉션을 사용 하여 주석을 무시할 수 있습니다 .
다음 방법을 추가하십시오 AndroidTestCase
.
/**
* @return The {@link Context} of the test project.
*/
private Context getTestContext()
{
try
{
Method getTestContext = ServiceTestCase.class.getMethod("getTestContext");
return (Context) getTestContext.invoke(this);
}
catch (final Exception exception)
{
exception.printStackTrace();
return null;
}
}
그런 다음 getTestContext()
원하는 시간에 전화 하십시오. 🙂
답변
업데이트 : AndroidTestCase
이 클래스는 API 레벨 24에서 더 이상 사용되지 않습니다 InstrumentationRegistry
. 대신 사용하십시오 . Android 테스트 지원 라이브러리를 사용하여 새 테스트를 작성해야합니다. 공지 사항 링크
TestCase 대신 AndroidTestCase에서 확장해야합니다.
AndroidTestCase 클래스 개요
리소스 또는 활동 컨텍스트에 의존하는 기타 항목에 액세스해야하는 경우이를 확장합니다.
답변
Kotlin 및 Mockito를 사용하여 컨텍스트를 얻으려면 다음과 같은 방법으로 수행 할 수 있습니다.
val context = mock(Context::class.java)
나는 그것의 도움을 바랍니다
답변
이것은 컨텍스트를 얻는 올바른 방법입니다. 다른 방법은 이미 사용되지 않습니다.
import androidx.test.platform.app.InstrumentationRegistry
InstrumentationRegistry.getInstrumentation().context
답변
import androidx.test.core.app.ApplicationProvider;
private Context context = ApplicationProvider.getApplicationContext();