LoginSignup
12
14

More than 5 years have passed since last update.

Android Studio 1.5 で JUnit4 を使い始める

Posted at

この文章の目的

Android開発でJUnitを導入する際の、手順の提示。

この文章でできるようになること

Android Studio 1.5 で JUnit4 を使い始められるようになる。
特に、実機・エミュレータを使用 しない JUnitでのテストを使えることを知る。

この文章で身につかないこと

  • Android Studioのインストール方法
  • Android Studioの使い方
  • JUnitの良い記述方法
  • モックを利用したJUnitによるテスト記述方法
  • UnitTestの良い作り方
  • UnitTestにおけるテスト手法

手順

本家の"Getting Started with Testing"を読んでおくと、流れは掴める。

参考

プロジェクト作成

今回は、新規で作成する。
プロジェクト作成

Application NameNewSampleUnitTestAppとしておく。
Company Domainは各自で定義する。
プロジェクト作成

Phone and Tabletを選択。
プロジェクト作成

Blank Activityを選択。
プロジェクト作成

Finishを選択。
プロジェクト作成

JUnitを使えるようにする

使用するライブラリの組み込み。
メニューのProject Structure経由に該当する編集領域はあるが、モジュールの検索で一部のものがひっかからないようので、直接編集した方が良い。

まずは、プロジェクトのトップにあるbuild.gradleを確認。
build.gradle編集

参考のGetting Started with TestingにあるConfigure Your Project for Local Unit Testsに書かれているようにJUnitのライブラリの組み込み。
記載された内容のうち、最低限必要なものを追加する。

必要なライブラリの指定として、三つを追加する。
com.android.support:support-annotationsのバージョンは、他のライブラリに合わせたものに変更。
同様に、com.android.support.test:runnercom.android.support.test:rulesのバージョンは、下記サイトに合わせて変更。
https://google.github.io/android-testing-support-library/downloads/index.html

また、テストランナーの指定も追加。

NewSampleUnitTestApp/app/build.gradle
apply plugin: 'com.android.application'

android {
    compileSdkVersion 23
    buildToolsVersion "23.0.3"

    defaultConfig {
        applicationId "net.tacck.app.android.newsampleunittestapp"
        minSdkVersion 15
        targetSdkVersion 23
        versionCode 1
        versionName "1.0"
        testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner" // テストランナーの指定
    }
    buildTypes {
        release {
            minifyEnabled false
            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
        }
    }
}

dependencies {
    compile fileTree(dir: 'libs', include: ['*.jar'])
    testCompile 'junit:junit:4.12'
    compile 'com.android.support:appcompat-v7:23.2.1'
    compile 'com.android.support:design:23.2.1'

    androidTestCompile 'com.android.support:support-annotations:23.2.1' // ライブラリ追加
    androidTestCompile 'com.android.support.test:runner:0.5' // ライブラリ追加
    androidTestCompile 'com.android.support.test:rules:0.5' // ライブラリ追加
}

Android Studioの画面にメッセージが出るので「Sync Now」をクリックする。
しばらく待って、エラーメッセージが出なければOK。

ローカル実行のテスト

テスト対象クラスの作成

左列にあるBuild Variantsを選択し、Test ArtifactUnit Testsを選択する。
テスト対象クラスの作成"

"Android"から"Project"へ変更し、app/src/main/java/[Package名]の下にSampleModelクラスを作成する。

テスト対象クラスの作成"

テスト対象クラスの作成

作成したら、下記のようにgetTrue()メソッドを追加する。

SampleModel.java
package net.tacck.app.android.newsampleunittestapp;

public class SampleModel {

    public boolean getTrue() {
        return true;
    }
}

テスト作成

SampleModel.javaファイルのクラス名SampleModelへカーソルを合わせ、Option + Enterとする。
メニューのCrate Testを選択する。
ダイアログが出たらJUnit4を指定し、作成したgetTrue()を選択する。
生成されたテストクラスのメソッドtestGetTrue()にテストコードを記述する。
テスト作成
テスト作成

ファイルが生成されたら、下記のようにテストコードを記述する。

SampleModelTest.java
package net.tacck.app.android.newsampleunittestapp;

import org.junit.Test;
import static org.junit.Assert.*;

public class SampleModelTest {

    @Test
    public void testGetTrue() throws Exception {
        SampleModel sampleModel = new SampleModel();
        assertTrue(sampleModel.getTrue());
    }
}

実行

Project内のSamleModelTest.javaファイル上で右クリックし、Run 'SampleModelTest'を選択する。
実行

下側にテスト結果が表示される。今回はAll Tests Passedとなっており、作成したテストが成功になっている。
実行

カバレッジ確認

同様にProject内のSamleModelTest.javaファイル上で右クリックし、Run 'SampleModelTest' with Coverageを選択する。

下側に結果、右側にカバレッジの状況が表示される。Elementにあるパッケージ名をダブルクリックすると、各クラスごとのカバレッジが表示される。
カバレッジ確認

エミューレータ・実機実行のテスト

テスト対象クラス・メソッドの作成

左列にあるBuild VariantsTest Artifactにて、Android Instrumentation Testsを選択する。

app/src/main/java/[Package名]の下にある既存のMainActivity.javaに、下記のように新規メソッドとしてgetFalse ()を追加する。

MainActivity.java
package net.tacck.app.android.newsampleunittestapp;

import android.os.Bundle;
import android.support.design.widget.FloatingActionButton;
import android.support.design.widget.Snackbar;
import android.support.v7.app.AppCompatActivity;
import android.support.v7.widget.Toolbar;
import android.view.View;
import android.view.Menu;
import android.view.MenuItem;

public class MainActivity extends AppCompatActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar);
        setSupportActionBar(toolbar);

        FloatingActionButton fab = (FloatingActionButton) findViewById(R.id.fab);
        fab.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                Snackbar.make(view, "Replace with your own action", Snackbar.LENGTH_LONG)
                        .setAction("Action", null).show();
            }
        });
    }

    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        // Inflate the menu; this adds items to the action bar if it is present.
        getMenuInflater().inflate(R.menu.menu_main, menu);
        return true;
    }

    @Override
    public boolean onOptionsItemSelected(MenuItem item) {
        // Handle action bar item clicks here. The action bar will
        // automatically handle clicks on the Home/Up button, so long
        // as you specify a parent activity in AndroidManifest.xml.
        int id = item.getItemId();

        //noinspection SimplifiableIfStatement
        if (id == R.id.action_settings) {
            return true;
        }

        return super.onOptionsItemSelected(item);
    }

    public boolean getFalse() {
        return false;
    }
}

テスト作成

MainActivity.javaファイルのクラス名MainActivityへカーソルを合わせ、Option + Enterとする。
メニューのCrate Testを選択する。
ダイアログが出たらJUnit4を指定し、作成したgetFalse()を選択する。
生成されたテストクラスのメソッドtestGetFalse()にテストコードを記述する。
テスト作成
テスト作成

ダイアログでファイルの作成先を尋ねられるので、app/src/androidTest/java/[パッケージ名]となるものを選択する。
スクリーンショット 2016-04-10 21.55.15.png

生成されたテストクラスのメソッドtestGetFalse()にテストコードを記述する。
この時、元のActivityを参照するために、@Ruleアノテーションを利用してActivityTestRuleも作成する。

MainActivityTest.java
package net.tacck.app.android.newsampleunittestapp;

import android.support.test.rule.ActivityTestRule;

import org.junit.Rule;
import org.junit.Test;

import static org.junit.Assert.*;

public class MainActivityTest {

    @Rule
    public  ActivityTestRule<MainActivity> mActivityRule = new ActivityTestRule<>(MainActivity.class);

    @Test
    public void testGetFalse() throws Exception {
        assertEquals(false, mActivityRule.getActivity().getFalse());
    }
}

実行

Project内のMainActivityTest.javaファイル上で右クリックし、Run 'MainActivityTest'を選択する。
実行

エミュレータが起動されていない・実機が接続されていない場合は、エミュレータ起動選択画面が出る。
スクリーンショット 2016-04-10 22.16.21.png

実機接続・エミュレータ起動ができて正しく実行できる状態となったら、テストが実行され下側にテスト結果が表示される。今回はパッケージ名の右側がP:1となっており、作成したテストが成功になっている。
実行

12
14
1

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
12
14