未解决的参考:测试

ven*_*ore 12 android integration-testing kotlin 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
Run Code Online (Sandbox Code Playgroud)

我试过谷歌搜索这个问题,但没有成功.

我已经尝试过的步骤:

  1. 检查是否安装了包含InstantTaskExecutorRule的库,我可以深入了解这个包(是的,我可以)
  2. 检查我的测试是否放在正确的文件夹中(是的,它在androidTest)
  3. 检查我是否正确启动了测试(可能是我通过右键单击包启动它们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()
    }

}
Run Code Online (Sandbox Code Playgroud)

ven*_*ore 10

根据官方谷歌文档,我们应该以这样的方式添加我们的架构组件(LiveData)的测试助手:

// Test helpers for LiveData
testImplementation "android.arch.core:core-testing:1.1.0"
Run Code Online (Sandbox Code Playgroud)

至少对我来说它只是不起作用.(见上面的问题)

实际应该如何:

// Test helpers for LiveData
androidTestImplementation "android.arch.core:core-testing:1.1.0"
Run Code Online (Sandbox Code Playgroud)

现在一切正常!

  • 我认为它是 testImplementation 或 androidTestImplementation 取决于测试的哪个目录(工具或非工具)需要依赖项。这意味着您可能两者都需要。有人可以证实或否认吗? (2认同)

Pau*_*ang 9

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

testImplementation "junit:junit:4.12"

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