未解决的参考:测试
Unresolved reference: testing
我正在尝试在我目前完全用 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)
然后 "Run tests in..." 来启动它们)
我也曾尝试将我的源目录从 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"
现在一切正常!
我刚刚遇到了同样的问题,这是因为我导入了更新版本的 junit,4.13-beta-3。降级到4.12版本后一切正常
testImplementation "junit:junit:4.12"
希望对其他人有所帮助。
对我来说,具体问题与
未解决的参考:InstantTaskExecutorRule
我解决了它升级,在依赖括号中,
testImplementation "androidx.arch.core:core-testing:2.1.0"
从 2.0.0 到 2.1.0
再见
我正在尝试在我目前完全用 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)
然后 "Run tests in..." 来启动它们)
我也曾尝试将我的源目录从 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"
现在一切正常!
我刚刚遇到了同样的问题,这是因为我导入了更新版本的 junit,4.13-beta-3。降级到4.12版本后一切正常
testImplementation "junit:junit:4.12"
希望对其他人有所帮助。
对我来说,具体问题与 未解决的参考:InstantTaskExecutorRule 我解决了它升级,在依赖括号中,
testImplementation "androidx.arch.core:core-testing:2.1.0"
从 2.0.0 到 2.1.0 再见