我正在尝试在完全用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
我已经尝试过搜索这个问题,但没有成功。
我已经尝试遵循的步骤:
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()
}
}
最佳答案
根据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"
现在一切正常!