0
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

Main Thread の Unit Test(UnitTest探求記3)

Last updated at Posted at 2020-08-26

Unit Test 探求記は、unit test に関してまったりと実験しつつその過程を綴ってみるというものです。

今回のお題

MainThread(Ui Thread)の unit test を行ってみます。

テスト対象

今回は、current thread が main thread かどうかを判断する val を作成して、それをテスト対象とします。

source tree

◆ isMainThread

soruce

val isMainThread: Boolean
    get() = Thread.currentThread() == Looper.getMainLooper().thread

Unit Test

  • Looper を直接利用するので、instrumented test を用います。
  • @UiThreadTest を用いて main thread 上での実行をテストします。
  • Assertion に Google Truth, AssertJ, Hamcrest を利用してみます。1

◆ build.gradle.kts

UiThreadTest, Google Truth, AssertJ への依存関係を追加します。

source

// for androidx.test.annotation.UiThreadTest
androidTestImplementation("androidx.test:rules:1.2.0")

// for Google Truth
androidTestImplementation("com.google.truth:truth:1.0.1")

// for AssertJ
androidTestImplementation("org.assertj:assertj-core:3.12.2")

◆ Unit Test

使い勝手の違いに興味があったので、Assetion に Junit, Google Truth, AssertJ, Hamcrest を同時に利用してみました。1

source

/**
 * Running on worker thread.
 */
@Test
fun isMainThread_ReturnsFalse() {
    // Junit
    Assert.assertFalse(isMainThread)

    // Google Truth
    Truth.assertThat(isMainThread).isFalse()

    // AssertJ
    Assertions.assertThat(isMainThread).isFalse()

    // Hamcrest
    MatcherAssert.assertThat(isMainThread, `is`(false))
}

/**
 * Running on main thread.
 */
@Test
@UiThreadTest
fun isMainThread_ReturnsTrue() {
    // Junit
    Assert.assertTrue(isMainThread)

    // Google Truth
    Truth.assertThat(isMainThread).isTrue()

    // AssertJ
    Assertions.assertThat(isMainThread).isTrue()

    // Hamcrest
    MatcherAssert.assertThat(isMainThread, `is`(true))
}

◆ テスト結果

下記のように、テストに成功しました。

$ ./gradlew connectedAndroidTest

> Task :android:connectedDebugAndroidTest
Starting 2 tests on ASUS_X00PD - 8.0.0

BUILD SUCCESSFUL in 33s
59 actionable tasks: 9 executed, 50 up-to-date

まとめ

今回は、@UiThreadTest を用いた main thread のテストを行い、Assetion に Junit, Google Truth, AssertJ, Hamcrest を利用してみました。

  1. どれか1つでよいわけなのですが、比較検討するために、しばらく併用してみようと思います。 2

0
1
0

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
0
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?