상식닷컴
로그인
가입하기
2026년 상식닷컴 선정 식당 & 카페 리스트
2025년 2026년 신상 호텔 리스트
최근에 오픈한 호텔을 찾는다면 살펴보세요
일주일 식단표 어플
자동 일주일 식단표 어플
안드로이드
아이폰
주식 & 코인 차트의 신
1000만원으로 2000만원 만들기 프로젝트
궁금한 상식 보기
수영장에서 체험할 수 있는 다양한 수영 스타일에 대한 정보를 공유해 주세요.
여름 일본 여행에서 가장 추천하는 관광지는 어디인가요?
여름 일본 여행을 위한 소셜 미디어 활용 팁은 무엇인가요?
여름 동남아 여행 시 시장에서의 흥정 방법은 무엇인가요?
여름 동남아 여행에서 경험한 재밌는 사건은 무엇인가요?
간호사가 환자에게 제공하는 영양 상담의 중요성은 무엇인가요?
간호사로서의 취업 시장 동향은 어떻게 변하고 있나요?
Mr.
다른 사람과 책읽기 경험을 공유하는 방법은 무엇인가요?
연간 독서 목표를 설정하는 방법은 무엇인가요?
노화와 운동의 관계는 무엇인가요?
에인트호번에서의 자원봉사 기회는 어디서 찾을 수 있나요?
Previous
Next
수정하기 - Robolectric에서 Fragment 테스트를 수행하는 방법은 무엇인가요?
닉네임
비밀번호
제목
내용
[이미지 업로드는 권한이 있는 사람만 가능. 하단 카톡으로 연락]
Robolectric을 사용하여 Android의 Fragment를 테스트하는 방법은 크게 두 가지 접근법이 있습니다. 하나는 `FragmentScenario`를 사용하는 방식이고, 다른 하나는 직접 `Fragment`를 `FragmentManager`를 통해 수동으로 추가하여 테스트하는 방식입니다. Robolectric은 실제 기기나 에뮬레이터 없이 JVM 환경에서 Android 컴포넌트를 실행 가능하게 해주므로 빠르고 안정적인 단위 테스트가 가능합니다. 아래는 Robolectric 환경에서 Fragment 테스트를 수행하는 일반적인 절차와 방법, 주의사항을 단계별로 자세히 설명한 내용입니다. --- 1. Robolectric 테스트 환경 설정 먼저 `build.gradle` 파일에 Robolectric 의존성을 추가합니다. ```gradle testImplementation "org.robolectric:robolectric:4.9" // 최신 버전으로 맞춰서 사용 testImplementation 'androidx.test:core:1.5.0' // AndroidX 테스트 코어 라이브러리(필요시) ``` 그리고 테스트 클래스는 `@RunWith(RobolectricTestRunner.class)`를 선언합니다. --- 2. Fragment 테스트 일반 절차 Fragment는 액티비티에 붙어서 동작하는 컴포넌트이므로, Fragment 단독으로는 동작하지 않고 반드시 액티비티와 연계해서 테스트해야 합니다. Robolectric은 가벼운 액티비티 생성과 UI 사이클 호출이 가능하므로 이를 이용합니다. - 액티비티 인스턴스를 생성 - FragmentManager를 통해 Fragment를 추가 - Fragment 트랜잭션 커밋 및 실행 - 필요시 UI 상태나 뷰 요소 검증 --- 3. 샘플 코드 예시 다음은 Robolectric에서 Fragment를 테스트하는 기본적인 패턴입니다. ```java @RunWith(RobolectricTestRunner.class) public class MyFragmentTest { private Fragment fragment; @Before public void setUp() { // 1. 테스트에 사용할 Activity 생성 (AppCompatActivity 추천) AppCompatActivity activity = Robolectric.buildActivity(AppCompatActivity.class).setup().get(); // 2. Fragment 인스턴스 생성 fragment = new MyFragment(); // 3. FragmentManager로 Fragment 추가 및 커밋 activity.getSupportFragmentManager() .beginTransaction() .add(fragment, null) .commitNow(); // commitNow로 바로 트랜잭션 실행 // 이제 fragment는 액티비티에 붙어있고 라이프사이클도 onCreateView까지 호출된 상태 } @Test public void fragment_shouldNotBeNull() { assertNotNull(fragment); } @Test public void fragment_shouldHaveNonNullView() { // onCreateView에서 inflate한 뷰가 제대로 생성되었는지 확인 View view = fragment.getView(); assertNotNull(view); } @Test public void fragment_shouldHaveExpectedText() { // 예: fragment 레이아웃 내 텍스트뷰 확인 TextView tv = fragment.getView().findViewById(R.id.some_text_view); assertEquals("Hello, Robolectric!", tv.getText().toString()); } } ``` --- 4. FragmentScenario 활용 (AndroidX Test 라이브러리 설치 시) `FragmentScenario` 클래스는 Fragment를 독립적으로 테스트할 수 있도록 도와주며, 실제 기기나 에뮬레이터뿐 아니라 Robolectric 환경에서도 사용할 수 있습니다. ```java @RunWith(RobolectricTestRunner.class) public class MyFragmentScenarioTest { @Test public void testFragmentWithFragmentScenario() { FragmentScenario<MyFragment> scenario = FragmentScenario.launchInContainer(MyFragment.class); scenario.onFragment(fragment -> { // fragment가 attach되고 start, resume 된 상태 assertNotNull(fragment.getView()); TextView tv = fragment.getView().findViewById(R.id.some_text_view); assertEquals("Hello, Robolectric!", tv.getText().toString()); }); } } ``` 이 방식은 fragment lifecycle 상태를 직접 관리하지 않아도 되므로 테스트 코드가 단순해집니다. --- 5. 주요 포인트 및 팁 - commitNow() 사용 권장 : `commit()`은 비동기 실행이라 테스트 도중에 트랜잭션이 완료되지 않을 수 있습니다. `commitNow()`를 사용하면 즉시 트랜잭션을 끝내 UI와 상태가 안정적입니다. - Robolectric setup() 메서드 호출 : 액티비티 빌더의 `setup()` 호출로 `onCreate()`, `onStart()`, `onResume()` 라이프사이클이 실행됩니다. - 프래그먼트 의존 컴포넌트 주입 테스트 : 경우에 따라 Dagger/Hilt 등의 DI를 사용하는 경우 Injector를 초기화해야 합니다. - 레이아웃 없는 경우 : Fragment에 레이아웃 리소스가 없을 때는 뷰가 null일 수 있으니 null 체크 필요. - 실제 UI 동작과 차이 주의 : Robolectric은 UI 쓰레드에서 테스트하므로 실제 기기와 약간 동작 차이가 있을 수도 있습니다. - View ID 찾기 : 뷰를 `findViewById()` 할 때 null 여부와 정확성을 항상 검증할 것. --- 6. 요약 - Robolectric 환경에서 Fragment를 테스트하려면 액티비티를 생성하고 FragmentManager를 통해 Fragment를 추가 후 즉시 커밋(commitNow)하는 방식이 기본. - 혹은 AndroidX `FragmentScenario`를 사용하면 편리하고 안정적으로 Fragment의 수명주기를 제어할 수 있음. - 각 테스트 메서드에서 fragment의 뷰 생성 여부, 뷰 요소 상태, 메서드 동작 결과 등을 검증 가능. - 적절한 라이프사이클 진행과 commit 방식을 사용하여 안정적인 테스트 환경을 구성하는 것이 중요. 이를 통해 실제 기기 없이도 Fragment의 UI 및 로직 테스트를 효과적으로 수행할 수 있습니다.
이용안내
커뮤니티 이용안내
×
- 게시한 게시글로 발생하는 문제는 게시자에게 책임이 있습니다.
- 게시글이 타인/타업체의 저작권을 침해할 경우 모든 책임은 게시자에게 있습니다. 게시자가 모든 손해를 부담해야 합니다.
- 상식닷컴 운영자는 게시자와 상의하지 않고 게시글을 수정 또는 삭제할 수 있습니다.
- 상식닷컴 운영자는 깨끗한 커뮤니티 공간을 만드는 것이 1순위입니다.
수정하기
취소하기