Android
test
Espresso
JUnit

2015年7月時点でのJUnit4やEspressoを使ったAndroidアプリのテストについて

More than 1 year has passed since last update.

以前「Androidのテスティングフレームワークを選定してみる」という記事を書いたのですが、最近久しぶりにEspressoを使ったテストコードを書こうと思って調べていたら、Espressoが2.0から2.2になっていたりして、いつのまにやらTesting Support Libraryが色々と更新されているようでした。

なので、メモがてら少しまとめてみました。


testing-support-libが分割された

以下の2つに分割されたようです。


  • com.android.support.test:runner

  • com.android.support.test:rules

Espresso 2.1のReleaseNotesに破壊的な変更点として記述されています。

Breaking Changes

test runner artifact split into two and the name changed from com.android.support.test:testing-support-lib:0.1 to com.android.support.test:runner:0.2 + com.android.support.test:rules:0.2.

Espresso 2.0の頃はbuild.gradleに以下のように記述していましたが、


build.gradle

androidTestCompile 'com.android.support.test:testing-support-lib:0.1'

androidTestCompile 'com.android.support.test.espresso:espresso-core:2.0'

Espresso 2.1からは以下のように記述します。


build.gradle

androidTestCompile 'com.android.support.test:runner:0.3'

androidTestCompile 'com.android.support.test:rules:0.3'
androidTestCompile 'com.android.support.test.espresso:espresso-core:2.2'

build.gradle


Espressoを使ったテストで@Testが使えるようになった

これまでのEspresso(ver 2.0以前)でテストするには、ActivityInstrumentationTestCase2を継承する必要がありました。

そのActivityInstrumentationTestCase2はjunit.framework.TestCaseのサブクラスであり、TestCaseのサブクラスは、AndroidJUnitRunnerにJUnit3として扱われてしまうため、JUnit4の機能である@Testを使用することができませんでした。

@Test annotation is a replacement for the test-prefix naming convention used in JUnit3. JUnit4 test classes no longer require to extend TestCase or any of its subclasses. In fact JUnit4 tests cannot extend TestCase, otherwise AndroidJUnitRunner will treat them as JUnit3 tests.

User guide for AndroidJUnitRunner

ですが、Espresso 2.1でActivityTestRuleが追加され、そのActivityTestRuleによって single activityのテストが可能となったため、 ActivityInstrumentationTestCase2は不要となりました。

よって、@Testなどを使えるようになりました。

ActivityTestRuleを使ったテストコードは以下のようになります。


EspressoTest.java

@RunWith(AndroidJUnit4.class)

public class EspressoTest {

private Activity mActivity;

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

@Before
public void setUp(){
// Activityの取得
mActivity = mActivityRule.getActivity();
}

// @Testが使えるので日本語だけのテストメソッドが書けるようになった
@Test
public void 足し算機能の基本的な挙動() {
// 数字入力
onView(ViewMatchers.withId(R.id.num1)).perform(typeText("2"));
onView(withId(R.id.num2)).perform(typeText("20"));

// 足すボタンクリック
onView(withId(R.id.equal_button)).perform(click());

// 計算結果確認
onView(withId(R.id.result)).check(matches(withText("22")));
}
}


EspressoTest.java


WebViewがサポートされた

Espresso 2.2からWebViewをテストできるようになりました。

espresso-web 2.2

New WebView support

ReleaseNotes

以下の記事で詳しく紹介されています。

Espresso webview support


さいごに

ほかにも、Intentをテストできるespresso-intentsが追加されていたりと、今回紹介した機能以外にも、便利そうな機能が色々と追加されているようです。

ReleaseNotes