상식닷컴
로그인
가입하기
2026년 상식닷컴 선정 식당 & 카페 리스트
2025년 2026년 신상 호텔 리스트
최근에 오픈한 호텔을 찾는다면 살펴보세요
일주일 식단표 어플
자동 일주일 식단표 어플
안드로이드
아이폰
주식 & 코인 차트의 신
1000만원으로 2000만원 만들기 프로젝트
수정하기 - Robolectric을 사용한 단위 테스트의 예시는 어떤 것이 있나요?
닉네임
비밀번호
제목
내용
[이미지 업로드는 권한이 있는 사람만 가능. 하단 카톡으로 연락]
Robolectric은 안드로이드의 UI 및 프레임워크 코드를 JVM 환경에서 실행할 수 있도록 해주는 테스트 프레임워크입니다. 이를 통해 실제 디바이스나 에뮬레이터 없이도 안드로이드 컴포넌트(Activity, Service 등)의 동작을 시뮬레이션하고 단위 테스트를 할 수 있습니다. 아래는 Robolectric을 사용한 기본적인 단위 테스트 예시입니다. --- 1. 환경 설정 먼저 `build.gradle`에 Robolectric 의존성을 추가해야 합니다. 예를 들어: ```gradle testImplementation 'org.robolectric:robolectric:4.9' testImplementation 'junit:junit:4.13.2' ``` --- 2. 기본 Activity 테스트 예시 만약 `MainActivity` 라는 Activity가 있다고 하면, 이 Activity를 Robolectric으로 테스트하는 기본 구조는 다음과 같습니다. ```java @RunWith(RobolectricTestRunner.class) public class MainActivityTest { private MainActivity activity; @Before public void setUp() { // Robolectric을 이용해 Activity 인스턴스를 생성하고 LifeCycle을 실행 activity = Robolectric.buildActivity(MainActivity.class) .create() // onCreate() 호출 .start() // onStart() 호출 .resume() // onResume() 호출 .get(); } @Test public void testActivityNotNull() { // Activity 인스턴스가 정상적으로 생성됐는지 확인 assertNotNull(activity); } @Test public void testButtonClickChangesText() { // 예를 들어, activity_main.xml에 button과 TextView가 있다고 가정 Button button = activity.findViewById(R.id.button); TextView textView = activity.findViewById(R.id.textView); // 버튼 클릭 전에 TextView의 텍스트 String beforeClick = textView.getText().toString(); // 버튼 클릭 실행 button.performClick(); // 클릭 후 TextView 텍스트 변경 여부 확인 String afterClick = textView.getText().toString(); assertNotEquals(beforeClick, afterClick); // 예시로 특정 텍스트인지 검사 가능 assertEquals("Clicked!", afterClick); } } ``` 이 예시에서는 Activity의 생명주기 메서드를 직접 호출하여 실제 디바이스에서처럼 Activity가 동작하는 환경을 만듭니다. --- 3. Intent 발생 확인 테스트 액티비티에서 다른 액티비티를 호출했는지 확인할 때도 Robolectric이 유용합니다. ```java @Test public void clickingButton_shouldStartSecondActivity() { Button button = activity.findViewById(R.id.button); button.performClick(); Intent expectedIntent = new Intent(activity, SecondActivity.class); Intent actualIntent = Shadows.shadowOf(activity).getNextStartedActivity(); assertEquals(expectedIntent.getComponent(), actualIntent.getComponent()); } ``` `Shadows.shadowOf` 메서드를 통해 실제 Intent 호출 내역을 확인할 수 있습니다. --- 4. 리소스 접근 테스트 Robolectric은 안드로이드 리소스도 JVM 환경에서 접근 가능합니다. ```java @Test public void stringResourceVerify() { String appName = activity.getString(R.string.app_name); assertEquals("MyApp", appName); } ``` --- 5. SharedPreferences 테스트 Robolectric은 `SharedPreferences`도 실제처럼 동작합니다. ```java @Test public void sharedPreferencesWriteAndRead() { SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(activity); prefs.edit().putString("key", "value").commit(); String value = prefs.getString("key", null); assertEquals("value", value); } ``` --- 요약 - Robolectric은 안드로이드 UI 및 플랫폼 코드를 JVM에서 실행할 수 있도록 해주므로 빠른 단위 테스트가 가능하다. - Activity, View, Intent 동작, 리소스, SharedPreferences 등 다양한 기능을 테스트 가능하다. - 일반적으로 `@RunWith(RobolectricTestRunner.class)` 와 `.buildActivity()` 메서드를 사용하여 테스트한다. - 실제 디바이스 대신 "그림자(Shadow)" 객체를 이용해 내부 동작을 점검할 수 있다. 이런 Robolectric 테스트를 통해 UI나 안드로이드 플랫폼 의존 코드에 대한 단위 테스트를 쉽게 작성할 수 있고, CI 환경에서도 빠르게 실행할 수 있다는 장점이 있습니다.
이용안내
커뮤니티 이용안내
×
- 게시한 게시글로 발생하는 문제는 게시자에게 책임이 있습니다.
- 게시글이 타인/타업체의 저작권을 침해할 경우 모든 책임은 게시자에게 있습니다. 게시자가 모든 손해를 부담해야 합니다.
- 상식닷컴 운영자는 게시자와 상의하지 않고 게시글을 수정 또는 삭제할 수 있습니다.
- 상식닷컴 운영자는 깨끗한 커뮤니티 공간을 만드는 것이 1순위입니다.
수정하기
취소하기