【发布时间】: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()
}
}
【问题讨论】:
标签: android kotlin integration-testing android-architecture-components