class DessertsHolder {
private val counter = MutableLiveData<Int>()
private val list = mutableListOf<String>()
init {
counter.value = 0
}
fun getCounter(): LiveData<Int> = counter
fun add(item: String) {
list.add(item)
counter.value = list.size
}
fun remove(item: String) {
list.remove(item)
counter.value = list.size
}
fun clear() {
list.clear()
counter.value = 0
}
}
特に何もせず次のような普通の UnitTest を書くと、Looper が mock されていないというエラー(RuntimeException: Method getMainLooper in android.os.Looper not mocked. )がでます。
class DessertsHolderTest {
@Test
fun test() {
val holder = DessertsHolder()
holder.add("Donuts")
assertThat(holder.getCounter().value).isEqualTo(1)
}
}
そこで、まず AAC の core-testing ライブラリを追加します。
dependencies {
def lifecycle_version = "1.1.1"
testImplementation "android.arch.core:core-testing:$lifecycle_version"
}
AndroidX
dependencies {
def lifecycle_version = "2.0.0"
testImplementation "androidx.arch.core:core-testing:$lifecycle_version"
}
そして @get:Rule で rule に InstantTaskExecutorRule を指定します。このとき get: をつけないと rule が public ではないという ValidationError (ValidationError: The @Rule 'rule' must be public.)が起こるので注意しましょう。
class DessertsHolderTest {
@get:Rule
val rule: TestRule = InstantTaskExecutorRule()
@Test
fun test() {
...
}
}
0 件のコメント:
コメントを投稿