상식닷컴
로그인
가입하기
2026년 상식닷컴 선정 식당 & 카페 리스트
2025년 2026년 신상 호텔 리스트
최근에 오픈한 호텔을 찾는다면 살펴보세요
일주일 식단표 어플
자동 일주일 식단표 어플
안드로이드
아이폰
주식 & 코인 차트의 신
1000만원으로 2000만원 만들기 프로젝트
궁금한 상식 보기
소파를 구입 후 되팔 때의 요령이 있을까요?
소파 사용 후 수명 단축을 막기 위한 습관은 무엇인가요?
돌고래의 생태적 역할은 무엇인가요?
돌고래의 생태학적 연구는 어떻게 진행되나요?
잔디 잔디밭은 어떻게 만들 수 있나요?
앱 개발에서 애널리틱스 도구를 활용하는 방법은 무엇인가요?
앱 개발에 있어 콘텐츠 관리 시스템(CMS)의 역할은 무엇인가요?
어플 개발 초기 단계에서의 MVP란 무엇인가요?
어플 개발에서 팀원 모집을 위한 효과적인 방법은 무엇인가요?
목걸이를 만들 때 필요한 도구는 무엇인가요?
목걸이를 만들 때 일반적으로 사용되는 기술은 무엇인가요?
달력에서 특별한 날을 강조하는 방법은 무엇인가요?
Previous
Next
수정하기 - Robolectric을 사용하여 로그인을 테스트하는 방법은 무엇인가요?
닉네임
비밀번호
제목
내용
[이미지 업로드는 권한이 있는 사람만 가능. 하단 카톡으로 연락]
Robolectric은 안드로이드 유닛 테스트 환경을 <a href='https://sangseek.com/sangseeks/JVM/ko'>JVM</a> 내에서 빠르게 실행할 수 있게 해주는 프레임워크입니다. 실제 디바이스나 에뮬레이터 없이도 안드로이드 컴포넌트(Activity, Fragment 등)를 테스트할 수 있어 UI나 로직을 검증할 때 유용합니다. 특히 로그인 같은 사용자 인증 기능을 테스트할 때도 Robolectric을 적절히 활용할 수 있습니다. 아래는 Robolectric을 사용해 안드로이드 로그인 화면이나 로그인 로직을 테스트하는 방법에 대해 단계별로 자세히 설명합니다. --- 1. Robolectric 환경 설정 - 프로젝트에 Robolectric 의존성을 추가해야 합니다. 보통 `build.gradle` (모듈 레벨)에 다음을 추가합니다: ```gradle testImplementation "org.robolectric:robolectric:4.9" testImplementation "junit:junit:4.13.2" ``` - 테스트 클래스는 `src/test/java` 폴더에 위치시키고, JUnit과 RobolectricRunner를 사용합니다. --- 2. 로그인 화면(Activity) 테스트 준비 로그인화면이 `LoginActivity`라고 가정하겠습니다. ```java @RunWith(RobolectricTestRunner.class) @Config(sdk = {28}) // 원하는 안드로이드 SDK 버전 지정 public class LoginActivityTest { private LoginActivity activity; @Before public void setUp() { activity = Robolectric.buildActivity(LoginActivity.class) .create() .start() .resume() .get(); } // 테스트 메서드 작성 ... } ``` - `Robolectric.buildActivity()`를 사용해 액티비티 생명주기를 제어하며 인스턴스를 생성합니다. - 이렇게 하면 UI 위젯도 정상적으로 생성되므로 `findViewById()` 등으로 뷰에 접근할 수 있습니다. --- 3. 로그인 UI 조작 및 입력 테스트 - 로그인 폼에 아이디, 패스워드 입력란이 `EditText`, 로그인 버튼이 `Button`이라면 다음과 같이 조작할 수 있습니다. ```java @Test public void testLoginWithValidCredentials() { EditText usernameEditText = activity.findViewById(R.id.username); EditText passwordEditText = activity.findViewById(R.id.password); Button loginButton = activity.findViewById(R.id.login_button); // 사용자 입력 시뮬레이션 usernameEditText.setText("testuser"); passwordEditText.setText("password123"); // 로그인 버튼 클릭 시뮬레이션 loginButton.performClick(); // 다음 동작 검증 (예: 다른 액티비티로 이동) } ``` - `setText()`로 텍스트 입력을 설정한 뒤 `performClick()`으로 버튼 클릭 이벤트를 발생시킵니다. --- 4. 로그인 로직 검증 - 로그인 버튼 클릭 시 네트워크 호출이나 데이터베이스 호출이 있다면, 보통 외부 종속성이므로 모킹(Mock) 해야 합니다. - 예를 들어 로그인 로직을 별도의 `LoginManager` 클래스에 위임한다면, Mockito나 MockK로 해당 객체를 모킹한 후 정상/오류 응답을 테스트할 수 있습니다. ```java @Mock LoginManager loginManager; @Before public void setUp() { MockitoAnnotations.initMocks(this); activity = Robolectric.buildActivity(LoginActivity.class) .create() .start() .resume() .get(); // loginManager 대체 activity.setLoginManager(loginManager); } @Test public void testLoginSuccess() { when(loginManager.login("testuser", "password123")) .thenReturn(true); // EditText, Button 등 UI 이벤트 수행 코드 ... // 로그인 성공 시 UI 변화, 다른 액티비티 호출 등 검증 ShadowLooper.runUiThreadTasksIncludingDelayedTasks(); Intent expectedIntent = new Intent(activity, MainActivity.class); Intent actual = Shadows.shadowOf(activity).getNextStartedActivity(); assertEquals(expectedIntent.getComponent(), actual.getComponent()); } ``` - Robolectric `Shadow` 클래스를 활용하면 새로 시작된 액티비티 <a href='https://sangseek.com/sangseeks/인텐트/ko'>인텐트</a>를 같이 검증할 수 있습니다. --- 5. 로그인 실패 및 예외 처리 테스트 - 비밀번호 틀림, 사용자 미입력 등 시나리오에 대해 아래처럼 테스트합니다. ```java @Test public void testLoginFailure_ShowsError() { when(loginManager.login(anyString(), anyString())) .thenReturn(false); // EditText, Button 이벤트 수행 코드 // 예: 로그인 실패 시 토스트 메시지 띄우는 경우 ShadowToast.showedToast("로그인 실패"); assertTrue(ShadowToast.getTextOfLatestToast().contains("로그인 실패")); } ``` - UI 상태변경이나 토스트 메시지 등 사용자 피드백도 Robolectric과 관련 라이브러리(ShadowToast 등)로 점검 가능합니다. --- 6. 비동기 호출 테스트 - 만약 로그인이 비동기 콜백 방식이라면 `ShadowLooper`를 사용해 UI 쓰레드 메시지 큐를 실행시킵니다. ```java @Test public void testAsyncLogin() { // 비동기 모킹, 콜백 시뮬레이션 // 작업 후 ShadowLooper.runUiThreadTasksIncludingDelayedTasks(); // UI 상태 검증 } ``` --- 7. 기타 팁 및 권장사항 - 네트워크 직접 호출 테스트는 Robolectric보다는 Espresso+MockWebServer 조합이 더 적합하므로, 단위 테스트 수준에 맞게 로그인 로직을 구조화(예: ViewModel, Presenter 분리) 하는 것이 좋습니다. - UI 상태 검증 시 뷰 가시성, 텍스트 변경 여부, 인텐트 호출 여부를 꼼꼼히 확인하세요. - 커스텀 Application 클래스를 지정하거나 `@Config(application=TestApplication.class)` 등을 활용해 테스트 전용 설정을 적용할 수 있습니다. --- 요약 Robolectric을 통한 로그인 테스트는 기본적으로 다음 단계를 따릅니다. 1. Robolectric 환경 구축 및 Activity 인스턴스화 2. 로그인 UI 요소 찾기 (`EditText`, `Button` 등) 3. 사용자 입력 시뮬레이션 (`setText`, `performClick`) 4. 로그인 로직(외부 의존성) 모킹 5. UI 변화, 액티비티 이동, 토스트 메시지 등 결과 검증 6. 필요한 경우 비동기 작업용 로퍼 실행 및 추가 검증 이 방식을 통해, 실제 디바이스 없이도 로그인 화면의 주요 기능과 UI 흐름이 의도대로 동작하는지 효과적으로 테스트할 수 있습니다.
이용안내
커뮤니티 이용안내
×
- 게시한 게시글로 발생하는 문제는 게시자에게 책임이 있습니다.
- 게시글이 타인/타업체의 저작권을 침해할 경우 모든 책임은 게시자에게 있습니다. 게시자가 모든 손해를 부담해야 합니다.
- 상식닷컴 운영자는 게시자와 상의하지 않고 게시글을 수정 또는 삭제할 수 있습니다.
- 상식닷컴 운영자는 깨끗한 커뮤니티 공간을 만드는 것이 1순위입니다.
수정하기
취소하기