web-dev-qa-db-ja.com

未解決の参照:テスト

現在のAndroid= Kotlinで完全に記述されたプロジェクト)で簡単な統合テストを記述しようとしています。

問題は、テストが開始されず、次のエラーで失敗することです。

_Error:(4, 36) Unresolved reference: testing
Error:(18, 52) Unresolved reference: InstantTaskExecutorRule
Error:Execution failed for task ':app:kaptGenerateStubsDebugAndroidTestKotlin'.
> Compilation error. See log for more details
_

私はこの問題をグーグルで試しましたが、成功しませんでした。

私がすでに実行しようとした手順:

  1. InstantTaskExecutorRuleを含むライブラリがインストールされているかどうかを確認し、このパッケージに飛び込むことができます(はい、できます)
  2. テストが正しいフォルダーに配置されているかどうかを確認します(はい、androidTestにあります)
  3. テストを適切に起動するかどうかを確認します(おそらく、パッケージpkgName (androidTest)を右クリックしてから[テストを実行...]で起動します)。

また、ソースdirsの名前をJavaからkoltinに変更して、適切な値をsourceSetsに設定しようとしましたが、成功しなかったために元に戻し、理由ではないと考えました。

重要なお知らせ

行_import Android.Arch.core.executor.testing.InstantTaskExecutorRule_とInstantTaskExecutorRuleに関連するすべてのコード(テストロジック全体が空になることを意味します)にコメントし、たとえば単純なassertを配置すると、すべてが正常に機能します大丈夫。

しかし、私はこの特定のInstantTaskExecutorRuleを使用したいのですが、問題が実際に何であり、それを解決する方法を知りたい、または少なくともどこを探し、何をすべきかを知りたいのです。

これが私のテストコードです:

_import Android.Arch.core.executor.testing.InstantTaskExecutorRule
import Android.Arch.persistence.room.Room
import Android.support.test.InstrumentationRegistry
import Android.support.test.runner.AndroidJUnit4

import org.junit.After
import org.junit.Before
import org.junit.Rule
import org.junit.Test
import org.junit.runner.RunWith
import com.myapp.storage.base.AppDataBase


@RunWith(AndroidJUnit4::class)
class UserDaoTest{
    @JvmField @Rule val instantTaskExecutorRule = InstantTaskExecutorRule()

    private lateinit var db: AppDataBase

    @Before
    @Throws(Exception::class)
    fun setUp(){
        db = Room.inMemoryDatabaseBuilder(InstrumentationRegistry.getContext(), AppDataBase::class.Java)
                .allowMainThreadQueries()
                .build()
    }

    @After
    fun closeDB(){
        db.close()
    }

    @Test
    fun getUsersWhenNoUserInserted(){
        db.userDao().allUsers()
                .test().assertNoValues()
    }

}
_
14
vendettacore

公式のgoogle documentation によると、次のような方法でアーキテクチャコンポーネント(LiveData)のテストヘルパーを追加する必要があります。

// Test helpers for LiveData
testImplementation "Android.Arch.core:core-testing:1.1.0"

そして、少なくとも私にとってはそれはうまくいきません。 (上記の質問を参照してください)

実際の状態:

// Test helpers for LiveData
androidTestImplementation "Android.Arch.core:core-testing:1.1.0"

これですべてうまくいきます!

10
vendettacore

私はちょうど同じ問題に直面しました、そしてそれは私がjunitの新しいバージョン、4.13-beta-3をインポートしたためでした。バージョン4.12にダウングレードした後、すべてが問題なく動作しました。

testImplementation "junit:junit:$junit

これが他の人に役立つことを願っています。

6
Paul Wang