未解决的参考:测试

时间:2018-02-23 14:43:49

标签: android kotlin integration-testing android-architecture-components

我正在尝试在我目前在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

我尝试使用谷歌搜索这个问题,但没有成功。

我已经尝试过的步骤:

  1. 检查是否已安装包含InstantTaskExecutorRule的库,我可以深入此软件包(是的,我可以)
  2. 检查我的测试是否放在正确的文件夹中(是的,它位于androidTest
  3. 检查我是否正确启动了测试(可能是我通过右键单击包pkgName (androidTest)启动它们然后“在...中运行测试”)
  4. 我还试图将我的源目录重命名为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()
        }
    
    }
    

2 个答案:

答案 0 :(得分:9)

根据官方谷歌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"

现在一切正常!

答案 1 :(得分:2)

我只是遇到了同样的问题,这是因为我导入了junit的较新版本4.13-beta-3。降级到4.12版后,一切都很好。

testImplementation "junit:junit:$junit

我希望这对其他人有帮助。