我正在尝试在我目前在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)
启动它们然后“在...中运行测试”)我还试图将我的源目录重命名为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()
}
}
答案 0 :(得分:9)
根据官方谷歌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"
现在一切正常!
答案 1 :(得分:2)
我只是遇到了同样的问题,这是因为我导入了junit的较新版本4.13-beta-3。降级到4.12版后,一切都很好。
testImplementation "junit:junit:$junit
我希望这对其他人有帮助。