当前位置: 首页 > 知识库问答 >
问题:

测试RxJava2可流动查询室

郜俊晤
2023-03-14

我一直试图为我的Room数据库编写单元测试,在过去,当查询返回一个列表并创建一个允许主线程查询的数据库时,我就这样做了,但现在我试图用RxJava值进行测试,我没有运气。

下面是我的DAO代码

@Dao
interface AccountDAO {
    @Query("SELECT * FROM account")
    fun getAll(): Flowable<List<Account>>

    @Insert
    fun insert(accounts: List<Account>): List<Long>

    //...
}

下面是我的数据库测试代码,我尝试了一些方法让它通过:

@RunWith(AndroidJUnit4::class)
class CCDatabaseTest {
    //...

    @JvmField @Rule val mainActivity = ActivityTestRule<MainActivity>(MainActivity::class.java)

    @Before
    fun setUp() {
        val context = mainActivity.activity
        database = Room.inMemoryDatabaseBuilder(context, CCDatabase::class.java).allowMainThreadQueries().build()
        accountDao = database.accountDao()
        transactionDao = database.transactionDao()
    }

    //...

    @Test
    fun testWriteReadAccount() {
        val testAccount = Account(TEST_ACCOUNT_NAME, TEST_ACCOUNT_BALANCE)

        val ids = accountDao.insert(listOf(testAccount))
        assertEquals(1, ids.size)

        val accountsFlowable = accountDao.getAll()
        val testSubscriber = TestSubscriber<List<Account>>()
        accountsFlowable.subscribe(testSubscriber)

        testSubscriber.assertNoErrors()
        // Fails: testSubscriber.assertValueCount(1)
        // Fails: testSubscriber.assertValue(listOf(testAccount))
        // Fails: testSubscriber.assertResult(listOf(testAccount))
    }

    //...
}

DAO:https://github.com/adammc331/cashcaretaker/blob/develop/app-refresh/src/main/java/com/adammcneilly/cashcaretaker/daos/accountdao.kt

测试类:https://github.com/adammc331/cashcaretaker/blob/develop/app-refresh/src/androidtest/java/com/adammcneilly/cashcaretaker/data/ccdatabasetest.kt

共有1个答案

钱京
2023-03-14

作为我寻找答案的一部分,我在Florina Muntenescu的一篇媒体帖子上发表了评论,她回答了这个问题。

我需要在测试类中包含InstantTaskExecutorRule。这将后台任务执行器替换为同步运行所有内容的任务执行器。为了使用它,我在模块的build.gradle文件中添加了以下一行,请注意,虽然我必须排除某些模块(我得到了应用程序和测试应用程序之间的支持库差异),但您可能不会:

androidTestCompile ("android.arch.core:core-testing:$roomLibraryVersion") {
    exclude module: 'support-compat'
    exclude module: 'support-annotations'
    exclude module: 'support-core-utils'
}

现在,加上这些,我的测试类看起来如下所示:

@RunWith(AndroidJUnit4::class)
class CCDatabaseTest {
    // ...

    @JvmField @Rule val instantTaskExecutorRule = InstantTaskExecutorRule()
    @JvmField @Rule val mainActivity = ActivityTestRule<MainActivity>(MainActivity::class.java)

    @Before
    fun setUp() {
        val context = mainActivity.activity
        database = Room.inMemoryDatabaseBuilder(context, CCDatabase::class.java).allowMainThreadQueries().build()
        accountDao = database.accountDao()
    }

    // ...

    @Test
    fun testWriteReadAccount() {
        val testAccount = Account(TEST_ACCOUNT_NAME, TEST_ACCOUNT_BALANCE)

        val ids = accountDao.insert(listOf(testAccount))
        assertEquals(1, ids.size)

        accountDao.getAll()
                .test()
                .assertValue(listOf(testAccount))
    }

    // ...
}
 类似资料:
  • 问题内容: 我一直在寻找新的rx java 2,但我不确定我是否已经明白了这个主意… 我知道我们所拥有的并没有支持。 因此,基于例如,可以说我有有: 在大约128个值之后,这将崩溃,这很明显我消耗的速度比获取项目要慢。 但是,我们有相同的 即使我延迟使用它,它仍然完全不会崩溃。为了工作,可以说我放了一个运算符,崩溃已经消失了,但并不是所有值都被发出。 因此,我目前在脑海中找不到答案的基本问题是,为

  • 我一直在看新的rx java 2,我不太确定我是否理解了< code >背压的概念... 我知道我们有没有支持的和有背压。 因此,基于示例,假设我有与: 这将在大约128个值之后崩溃,很明显,我的消费速度比获取物品要慢。 但是< code>Observable也是如此 这将不会崩溃,即使我把一些消费延迟,它仍然工作。为了使< code >可流动工作,假设我将< code>onBackpressur

  • 问题内容: 我正在寻找一种快速(真正快速)的方法来测试对hibernate查询的更改。我有一个庞大的应用程序,它具有成千上万个不同的HQL查询(在XML文件中)和100多个映射的类,我不想重新部署整个应用程序,以仅测试对查询的一个微小更改。 好的设置如何使我免于重新部署并启用快速查询检查? 问题答案: 在Intellij IDEA 8.1.3中,选择的机制称为“ Facet”。立即测试HQL查询:

  • 问题内容: 我写了一堆查询来进行elasticsearch,我想为它们写一个单元测试。使用此后最小的量,可以进行弹性连接,从而可以进行一般的模拟。但是,当我尝试查看由查询生成的Json时,我没有设法以任何方式获取它。我试图按照这个帖子elsatic查询起订量,但它是只与旧版本的巢的,因为该方法并不再为对象。 我的测试如下: 还有其他方法可以实现我的要求吗? 问题答案: 最好的方法是使用捕获请求字节

  • 接入流程图 接入流程解析 step1: 创建部门、项目 基本介绍 部门是公司组织架构的基本单位,企业管理员在滴滴创建公司时,滴滴系统会为企业自动创建一个部门, 即公司的顶级部门,之后以顶级部门建立部门层级关系。 项目是更小的公司组织架构单位,比如安卓小组成立一个项目中心,然后该组员工共用这个项目中心的经费。 测试步骤 查询部门(river/BudgetCenter/get),调用该接口时(type

  • 测试前准备 测试前需完成以下几点: 企业注册 创建测试应用并审核通过 实现签名算法 调用授权认证接口 调用获取城市全量列表接口 城市全量列表建议缓存在本地,一天更新一次即可 调用获取城市计价规则接口 城市计价规则列表建议缓存在本地,一天更新一次即可 测试以下六类场景 一,下单并支付 下单成功并结束行程完成支付 调用价格预估接口 调用获取请求id接口,获得订单id 调用订单请求接口 使用司机测试工具