我想在我的安卓项目中编写简单的集成测试,完全使用Kotlin语言编写。
问题是测试甚至无法启动,并显示以下错误:
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
我已经尝试在谷歌上搜索这个问题,但没有成功。我已经尝试了以下步骤:
1. 检查包含InstantTaskExecutorRule的库是否已安装,并且我可以进入此包中(是的,我可以)。 2. 检查我的测试是否放置在正确的文件夹中(是的,它在androidTest中)。 3. 检查我是否正确启动了我的测试(可能是的,我通过右键单击包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()
}
}
import androidx.test.platform.app.InstrumentationRegistry
时。错误是“_未解决的引用:test_”。 - AdamHurwitz