상식닷컴
로그인
가입하기
2026년 상식닷컴 선정 식당 & 카페 리스트
2025년 2026년 신상 호텔 리스트
최근에 오픈한 호텔을 찾는다면 살펴보세요
일주일 식단표 어플
자동 일주일 식단표 어플
안드로이드
아이폰
주식 & 코인 차트의 신
1000만원으로 2000만원 만들기 프로젝트
수정하기 - Robolectric에서 Intent를 테스트하는 방법은 무엇인가요?
닉네임
비밀번호
제목
내용
[이미지 업로드는 권한이 있는 사람만 가능. 하단 카톡으로 연락]
Robolectric을 사용하여 Android 단위 테스트에서 Intent를 테스트하는 방법에 대해 자세히 설명드리겠습니다. Robolectric은 Android 프레임워크에 의존적인 코드를 JVM 환경에서 실행할 수 있게 해 주기 때문에, 실제 기기나 에뮬레이터 없이도 Intent 관련 동작을 검증할 수 있습니다. --- 1. Intent 생성 및 시작 확인 가장 기본적인 Intent 테스트는 `Activity` 또는 `Context`에서 특정 `Intent`가 제대로 생성되고, 시작되었는지 확인하는 것입니다. 예를 들어, 어떤 버튼 클릭 시 다음 화면(Activity)이 열리도록 하는 코드를 테스트한다고 가정해 봅시다: ```java public class MainActivity extends AppCompatActivity { void openDetail() { Intent intent = new Intent(this, DetailActivity.class); startActivity(intent); } } ``` 이 메서드가 호출될 때 `DetailActivity`로 가는 Intent가 생성되고 시작되는지를 확인하고 싶다면, Robolectric 테스트는 다음과 같이 작성할 수 있습니다: ```java @RunWith(RobolectricTestRunner.class) public class MainActivityTest { @Test public void openDetail_startsDetailActivity() { MainActivity activity = Robolectric.setupActivity(MainActivity.class); activity.openDetail(); Intent expectedIntent = new Intent(activity, DetailActivity.class); Intent actualIntent = Shadows.shadowOf(activity).getNextStartedActivity(); // Intent 비교: 구성 요소(component)가 같은지 검증 assertEquals(expectedIntent.getComponent(), actualIntent.getComponent()); } } ``` - `Shadows.shadowOf(activity).getNextStartedActivity()` 메서드를 통해 `startActivity()`에 전달된 실제 Intent를 얻을 수 있습니다. - 생성된 Intent와 예상 Intent의 핵심적인 값을 비교하여 올바른 Intent가 만들어졌고, 시작되었는지 검증합니다. --- 2. Intent에 포함된 Extra 데이터 검증 Intent에는 데이터를 전달하기 위해 `putExtra` 메서드를 사용하여 추가 정보를 포함할 수 있습니다. 이런 데이터를 검증하는 것도 중요합니다. 예제: ```java void openDetailWithData() { Intent intent = new Intent(this, DetailActivity.class); intent.putExtra("user_id", 42); startActivity(intent); } ``` 테스트 코드: ```java @Test public void openDetailWithData_startsActivityWithExtras() { MainActivity activity = Robolectric.setupActivity(MainActivity.class); activity.openDetailWithData(); Intent startedIntent = Shadows.shadowOf(activity).getNextStartedActivity(); int userId = startedIntent.getIntExtra("user_id", -1); assertEquals(42, userId); } ``` - `getIntExtra()`, `getStringExtra()` 등을 이용하여 Intent에 담긴 값들이 원하는 대로 들어있는지 검사합니다. --- 3. startActivityForResult와 인텐트 결과 검증 만약 `startActivityForResult()`를 호출했다면, Robolectric은 결과 Intent를 시뮬레이션하여 테스트할 수 있습니다. 예: ```java void openDetailForResult() { Intent intent = new Intent(this, DetailActivity.class); startActivityForResult(intent, 100); } ``` 테스트에서는 `ShadowActivity`를 통해 시작된 인텐트와 요청 코드 등을 확인할 수 있습니다. ```java @Test public void openDetailForResult_startsActivityForResult() { MainActivity activity = Robolectric.setupActivity(MainActivity.class); activity.openDetailForResult(); ShadowActivity shadowActivity = Shadows.shadowOf(activity); Intent startedIntent = shadowActivity.getNextStartedActivityForResult().intent; int requestCode = shadowActivity.getNextStartedActivityForResult().requestCode; assertEquals(new ComponentName(activity, DetailActivity.class), startedIntent.getComponent()); assertEquals(100, requestCode); } ``` --- 4. Intent 필터 및 액션 검사 Intent가 특정 액션이나 데이터 URI를 가지고 시작되는지 검증하는 경우도 있습니다. 예: ```java void openWebPage() { Intent intent = new Intent(Intent.ACTION_VIEW, Uri.parse("http://example.com")); startActivity(intent); } ``` 테스트: ```java @Test public void openWebPage_startsViewIntent() { MainActivity activity = Robolectric.setupActivity(MainActivity.class); activity.openWebPage(); Intent startedIntent = Shadows.shadowOf(activity).getNextStartedActivity(); assertEquals(Intent.ACTION_VIEW, startedIntent.getAction()); assertEquals(Uri.parse("http://example.com"), startedIntent.getData()); } ``` --- 5. 인텐트를 직접 생성해서 컴포넌트 테스트 또한, 인텐트를 직접 생성하고 `ActivityController`를 통해 테스트 용도로 전달도 가능합니다. ```java @Test public void detailActivity_receivesIntentData() { Intent intent = new Intent(RuntimeEnvironment.getApplication(), DetailActivity.class); intent.putExtra("user_id", 42); DetailActivity activity = Robolectric.buildActivity(DetailActivity.class, intent).setup().get(); // 액티비티가 인텐트를 잘 받고 처리했는지 검증 int userId = activity.getIntent().getIntExtra("user_id", -1); assertEquals(42, userId); } ``` --- 요약 - `Shadows.shadowOf(activity).getNextStartedActivity()` : `startActivity()` 호출 시 전달된 Intent를 가져올 때 사용 - Extra 데이터 검사 : `Intent.getXxxExtra()` 메서드를 통해 Intent에 포함된 데이터 검증 - `getNextStartedActivityForResult()` : `startActivityForResult()`에서 시작한 인텐트와 요청 코드를 확인 - Intent 액션 및 데이터 URI 검증 가능 - 테스트 대상 Activity에 인텐트를 직접 전달하여 검증 가능 --- 이와 같이 Robolectric 라이브러리를 사용하면, 실제 디바이스 없이도 Activity와 Intent 간의 상호작용과 데이터 전달이 올바르게 작동하는지 쉽게 검증할 수 있습니다.
이용안내
커뮤니티 이용안내
×
- 게시한 게시글로 발생하는 문제는 게시자에게 책임이 있습니다.
- 게시글이 타인/타업체의 저작권을 침해할 경우 모든 책임은 게시자에게 있습니다. 게시자가 모든 손해를 부담해야 합니다.
- 상식닷컴 운영자는 게시자와 상의하지 않고 게시글을 수정 또는 삭제할 수 있습니다.
- 상식닷컴 운영자는 깨끗한 커뮤니티 공간을 만드는 것이 1순위입니다.
수정하기
취소하기