woong's

android studio testing 환경 구축 하기(4) - Robolectric 사용하기 본문

Develop/Android

android studio testing 환경 구축 하기(4) - Robolectric 사용하기

dlsdnd345 2016. 2. 13. 22:29
336x280(권장), 300x250(권장), 250x250, 200x200 크기의 광고 코드만 넣을 수 있습니다.

android studio testing 환경 구축 하기(4) - Robolectric 사용하기


3장에서 jacoco 를 연동해보니 액티비티 코드가 빨간색으로 나타나 테스트 코드가 없는 것을 확인 했습니다 .

액티비티 코드도 테스트 코드를 통해서 안정성있는 코드를 만들어 주면 좋을것 같습니다 .


액비티비 테스트를 하기 위해서 ActivityInstrumentationTestCase2  를 사용해도 되지만 

ActivityInstrumentationTestCase2 를 사용하면 항상 디바이스나 에뮬레이터가 있어야 하기 때문에 번거롭습니다 .

그래서 가상 액티비티에서 테스트를 할수 있는 Robolectric 을 사용해 보려 합니다 .


Robolectric 은 jacoco를 연동하면서 설정이 어느정도 완료 되었습니다 .

바로 테스트 코드를 통해서 액티비티 코드 커버를 진행해 보겠습니다.

설정은 앞장을 보시면 되겠습니다.


1
2
3
4
5
6
7
8
9
10
 
dependencies {
    compile fileTree(dir: 'libs', include: ['*.jar'])
    compile 'com.android.support:appcompat-v7:21.0.3'
 
    androidTestCompile 'junit:junit:4.10'
    androidTestCompile "org.robolectric:robolectric:3.0-rc1"
 
 
}
cs


dependencies 를 추가 하고 MainActivityTest 클래스를 만듭니다 .


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
 
@RunWith(RobolectricGradleTestRunner.class)
@Config(constants = BuildConfig.class)
public class MainActivityTest {
 
    private Activity activity;
 
    @Before
    public void setUp() throws Exception {
 
        activity = Robolectric.setupActivity(MainActivity.class);
    }
 
    @Test
    public void testMainActivity() throws Exception {
 
        assertNotNull(activity);
    }
 
    @Test
    public void testClickLoginBtn(){
 
        Button btnLogin = (Button) activity.findViewById(R.id.btnLogin);
        btnLogin.performClick();
 
        ShadowActivity shadowActivity = shadowOf(activity);
 
        Intent startedIntent = shadowActivity.getNextStartedActivity();
        assertThat(startedIntent.getComponent().getClassName(),
                equalTo(LoginActivity.class.getName()));
    }
}
cs

 


위와 같이 테스트 코드를 작성합니다 .


테스트 시나리오


메인액티비티 로그인 버튼 선택 , 로그인 버튼 선택시 로그인 액티비티 활성화



setUp 메서드를 보면 로보렉트릭을 사용하여 메인액티비티를 가져옵니다 .

가져온 액티비티를 testMainActivity 메서드에서 존재여부를 테스트 합니다 .

마지막으로 testClickLoginBtn 메서드에서 버튼을 클릭하고 새로운 액티비티가 로그인액티비티 인지

테스트 하고 있습니다 .


위와같이 테스트 코드를 작성하면 액티비티 코드를 커버 할 수 있습니다 .


터미널을 열고 ./gradlew jacocoTestReport 를 실행 합니다 .



앞장과 동일한 index.xml 파일을 열어 보면







위와 같이 액티비티 코드가 커버된것을 볼수 있습니다 .

로그인 액티비티는 비어 있는 액티비티 입니다.


액티비티 존재여부 테스트를 작성해보시면 좋겠습니다 ^^



이와 같이 테스트를 진행하면 안정서있는 코드를 만들수 있을것 같습니다 .


로보렉트릭에서 생명 주기 등 여러가지 기능들이 있습니다 . 저또한 학습이 필요합니다 .

코드커버리지를 통해 커버되지 않은 코드를 로보렉트릭 홈페이지를 참조해 커버해 나가면서

학습하면 되지 않을까 싶습니다 . 실제 프로젝트에 연결해서 테스트 코드를 작성해보면

코드의 의존성이 있는지 확인도 해보고 테스트 코드 학습도 해보면 좋을것 같습니다 .


Comments