Saturday, October 10, 2015

Robolectric 사용하기 - 2

이번 포스팅에서는 직접 Robolectric 을 사용해보도록 하겠습니다.

1. Project 생성

저는 현재 AndroidStudio 1.4. 버전을 사용하고 있으며 해당 소스코드는 GitRepostiory를 통하여 제공하고 있습니다.




2. Robolectric 설정

Robolectric 사용하기 - 1에서 작성되어 있던것 처럼 dependency를 추가하고 "Build Variants"를 변경해줍니다. "Build Variants"은 좌측하단에 존재합니다.

3. 코드 작성

코드 또한 앞선 포스팅에 했던 Roblectric Homepage를 기반으로 작성하였습니다.

4. 몇가지 문제점

가장 먼저 Robolectric 의 경우 compileSdkVersion 21 이상일 경우에 build가 정상 수행되지 않았습니다. 따라서 compileSdkVersion을 21로 낮추었고 dependency의 경우에도 'org.assertj:assertj-core:1.7.0'를 추가해주어야 ExampleUnitTest가 작동하는 로직이 정상 수행됩니다.

5. 소스코드

WelcomeActivity .class

package com.juranoaa.robolectric;

import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;

public class WelcomeActivity extends Activity{

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.welcome_activity);

        Button button = (Button) findViewById(R.id.login);
        button.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                startActivity(new Intent(WelcomeActivity.this, LoginActivity.class));
            }
        });
    }
}

LoginActivity.class

package com.juranoaa.robolectric;

import android.app.Activity;
import android.os.Bundle;

public class LoginActivity extends Activity{

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.login_activity);
    }

}

welcome_activity.xml




    

login_activity.xml





AndroidManifest.xml



    

        
            
                
                
            
        

        
        

    


ExampleUnitTest.class

package com.juranoaa.robolectric;

import android.content.Intent;

import org.junit.Test;
import org.junit.runner.RunWith;
import org.robolectric.Robolectric;
import org.robolectric.RobolectricGradleTestRunner;
import org.robolectric.annotation.Config;

import static org.assertj.core.api.Assertions.assertThat;
import static org.robolectric.Shadows.shadowOf;

@RunWith(RobolectricGradleTestRunner.class)
@Config(constants = BuildConfig.class)
public class ExampleUnitTest {
    @Test
    public void clickingLogin_shouldStartLoginActivity() throws Exception {
        WelcomeActivity activity = Robolectric.setupActivity(WelcomeActivity.class);
        activity.findViewById(R.id.login).performClick();

        Intent expectedIntent = new Intent(activity, LoginActivity.class);
        assertThat(shadowOf(activity).getNextStartedActivity()).isEqualTo(expectedIntent);
    }
}

No comments:

Post a Comment