未解决的参考:测试

Posted

技术标签:

【中文标题】未解决的参考:测试【英文标题】:Unresolved reference: testing 【发布时间】:2018-08-03 15:48:00 【问题描述】:

我正在尝试在完全用 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()
    


【问题讨论】:

【参考方案1】:

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

现在一切正常!

【讨论】:

感谢您发布答案。使用“androidTestImplementation”是我的解决方案以及不同的库。很奇怪。 当我在 test 目录中使用 import androidx.test.platform.app.InstrumentationRegistry 进行 JUnit 测试时,@vendettacore 也遇到了同样的问题。错误是“未解析的参考:测试”。 这里是solution 我上面的import问题。这与添加库依赖的方式有关。 我认为是 testImplementation 或 androidTestImplementation 取决于测试的哪个目录(工具或非工具)需要依赖项。这意味着您可能需要两者。有人可以确认或否认吗? 我对所有测试依赖项都做了,现在错误消失了。【参考方案2】:

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

testImplementation "junit:junit:4.12"

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

【讨论】:

我也看到了这个问题,当将 JUnit 从 v4.13 恢复到 4.12 时,一切都很好。 如果要使用4.13版本请看***.com/a/59715907/9606199 非常感谢 Paul - 今天你的回答令人毛骨悚然!【参考方案3】:

对我来说,具体问题与 未解决的参考:InstantTaskExecutorRule 我在依赖项括号中解决了它的升级问题,

    testImplementation "androidx.arch.core:core-testing:2.1.0"

从 2.0.0 到 2.1.0 再见

【讨论】:

以上是关于未解决的参考:测试的主要内容,如果未能解决你的问题,请参考以下文章

2019-11-19解决Go test执行单个测试文件提示未定义问题

尝试模拟时未解决 Verilog 模块中的参考错误

未解决的参考匕首 2 + kotlin + android gradle

微信网页支付提示未注册问题的解决方案

是否有解决未定义参考/未解决符号问题的一般准则?

Advanced Installer 中测试数据库连接提示“未发现数据源名称并且未指定默认驱动程序”的解决办法