未解决的参考:测试
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执行单个测试文件提示未定义问题