InstantTaskExecutorRule

InstantTaskExecutorRule

我正在尝试在完全用Kotlin编写的当前android项目中编写简单的集成测试。

问题是该测试甚至无法启动,并且失败并显示以下错误:

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

我已经尝试过搜索这个问题,但没有成功。

我已经尝试遵循的步骤:
  • 检查是否已安装包含InstantTaskExecutorRule的库,并且我可以深入研究此软件包(是的,我可以)
  • 检查我的测试是否放置在正确的文件夹中(是,它在androidTest中)
  • 检查我是否正确启动了测试(可能是通过右键单击pkgName (androidTest)包,然后“在...中运行测试”来启动测试)

  • 我还尝试将源目录从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()
        }
    
    }
    

    最佳答案

    根据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-08 20:00