未解决的引用:testing
未解决的引用:testing
我正在尝试在我的现有Android项目中编写简单的集成测试,该项目完全使用Kotlin编写。问题是测试甚至无法启动,并出现以下错误:
错误:(4, 36)未解析的引用:testing
错误:(18, 52)未解析的引用:InstantTaskExecutorRule
错误:执行任务 ':app:kaptGenerateStubsDebugAndroidTestKotlin' 失败。
> 编译错误。请查看日志以获取更多详细信息。
我已经尝试在网上搜索解决此问题的方法,但没有成功。
我已经尝试过的步骤:
- 检查包含InstantTaskExecutorRule的库是否已安装,并且我可以进入此包(是的,可以)
- 检查我的测试是否放置在正确的文件夹中(是的,它位于androidTest中)
- 检查我是否正确启动了我的测试(可能是的,我通过右键单击包pkgName(androidTest),然后选择“在...中运行测试”来启动它们)
我还尝试将我的源目录从Java重命名为Kotlin,并设置正确的值给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()
}
}