使用 Room @Transaction 函数时 Android 仪器测试未运行结束

2023-11-25

我正在使用 AS 3.4.1 和运行 Android 9 的模拟器进行测试。

当我使用以下测试时,以下测试将无法运行Room Dao Function annotated with @Transaction in it.

class RecurrenceManagerTest : DatabaseTest() {

    @Rule
    @JvmField
    val instantTaskExecutorRule = InstantTaskExecutorRule()

    var recurringEntryId: Long = -1

    @Before
    override fun setup() {
        super.setup() // only initialized the db

        val recurringEntry = RecurringEntry(
            recurrence = Recurrence(DATE.toEpochMilli(), Recurrence.DAILY)
        )

        recurringEntryId = runBlocking { db.recurringEntryDao().insert(recurringEntry) }

        val recurringBookEntry = BookEntry.create(
            title = TITLE,
            date = DATE,
            value = VALUE,
            isPaid = IS_PAID,
            notes = NOTES,
            entryType = ENTRY_TYPE,
            categoryId = CATEGORY_ID,
            contacts = CONTACTS,
            recurringEntryId = recurringEntryId
        )

        runBlocking {
            db.bookEntryDao().insert(recurringBookEntry) // BreakPoint #1
        }
    }

    @Test
    fun testInsertRecurrencesAndSchedule() { 
        var recurringEntry = runBlocking { db.recurringEntryDao().get(recurringEntryId) } // BreakPoint #2

        assertThat(recurringEntry, notNullValue())

        runBlocking { RecurrenceManager.insertRecurrencesAndSchedule(ApplicationProvider.getApplicationContext(), db, recurringEntry!!) }

        val bookEntries = db.bookEntryDao().getBookEntries().liveDataValue()
    }
}

这是插入的函数:

@Transaction
suspend fun insert(bookEntry: BookEntry): Long {
    val id = insert(bookEntry.entity)
    bookEntry.embeddedContacts?.apply {
        forEach {
            it.id = 0
            it.bookEntryId = id
        }
    }?.let {
        insert(it)
    }

    return id
}

因此,如果我像这样运行测试(请参阅 BreakPoint #1),则 BreakPoint #2 甚至不会被调用,因此测试会在之前的某个地方结束,而没有结果。

如果我用完全相同的代码替换 BreakPoint #1 处的代码,insert函数有,测试运行正确。

有谁知道这里有什么问题吗?


您可以使用设置事务执行器在另一个线程中运行事务

return Room
       .inMemoryDatabaseBuilder(context, MyRoomDatabase::class.java)
       .setTransactionExecutor(Executors.newSingleThreadExecutor())
       .build()

然后在测试使用时运行阻塞而不是 runBlockingTest

@Test
fun moveItem() = runBlocking {
    transactionFunction()
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

使用 Room @Transaction 函数时 Android 仪器测试未运行结束 的相关文章

  • Instagram 勒克斯效果

    Instagram 最近添加了一个 Lux 按钮 可以对您拍摄的照片进行自动对比 调平 我有一堆图片需要以类似的方式自动调平 使这些图片看起来更好 如果我想在 Imagemagick 中使用批处理命令 需要使用什么 秘密成分 我应该坚持对比
  • 如何在 C# 中播放在线资源中的 .mp3 文件?

    我的问题与此非常相似question https stackoverflow com questions 7556672 mp3 play from stream on c sharp 我有音乐网址 网址如http site com aud
  • 更改显示的 DPI 缩放大小使 Qt 应用程序的字体大小渲染得更大

    我使用 Qt 创建了一些 GUI 应用程序 我的 GUI 应用程序包含按钮和单选按钮等控件 当我运行应用程序时 按钮内的按钮和字体看起来正常 当我将显示器的 DPI 缩放大小从 100 更改为 150 或 200 时 无论分辨率如何 控件的
  • C++ 成员函数中的“if (!this)”有多糟糕?

    如果我遇到旧代码if this return 在应用程序中 这种风险有多严重 它是一个危险的定时炸弹 需要立即在应用程序范围内进行搜索和销毁工作 还是更像是一种可以悄悄留在原处的代码气味 我不打算writing当然 执行此操作的代码 相反
  • ARM 的内核 Oops 页面错误错误代码

    Oops 之后的错误代码给出了有关 ARM EX 中的恐慌的信息 Oops 17 1 PREEMPT SMP在这种情况下 17 给出了信息 在 x86 中它代表 bit 0 0 no page found 1 protection faul
  • 是否可以将 Cypress e2e 测试与 firebase auth 项目结合使用?

    我正在探索 Cypress 进行 e2e 测试 看起来是很棒的软件 问题在于身份验证 Cypress 文档解释了为什么使用 UI 非常糟糕here https docs cypress io guides getting started t
  • 修改 ADW Android 启动器?

    我想更改和修改开源 ADW 启动器 启动器可在此处获取 https github com AnderWeb android packages apps Launcher https github com AnderWeb android p
  • 如何移动 Zend_Layout 的“视图”

    通常它会是这样的结构 application modules somemodule views scripts index index phtml 我如何将其移动到 application templates somemodule temp
  • 期望最大化算法的数值示例[重复]

    这个问题在这里已经有答案了 由于我不确定给出的公式 有人可以提供 EM 算法的简单数字示例吗 一个非常简单的具有 4 或 5 个笛卡尔坐标的坐标就可以了 那这个呢 http en wikibooks org wiki Data Mining
  • 使用 eclipse IDE 配置 angularjs

    我想开始使用 AngularJs 和 Java Spring 进行开发 我使用 Eclipse 作为 IDE 我想配置我的 Eclipse 以使这些框架无缝工作 我知道我可能要求太多 但相信我 我已经做了很多研究 你们是我最后的选择 任何帮
  • 如何获取 URL 中未知的 $_GET 值的数组?

    我正在使用一个在线购物车 它接受订购的商品并通过 URL 将其唯一 ID 传递到 process php 页面 所以 URL 看起来像这样 process php code 1 231 code 2 532 code 3 342 Anoth
  • 使用 Python 生成类似于 Messenger 或 kik 代码的圆形二维码

    我可以使用 Python 生成圆形 QR 码 就像 Facebook Messenger 或 kik 使用的那样吗 我访问了很多网站 但找不到这种类型的二维码 默认情况下 Python 生成方形 QR 码 但在我的项目中我想要圆形 QR 码
  • Django South - 将 null=True 字段转换为 null=False 字段

    我的问题是 转变的最佳做法是什么null True场变成null False使用 Django South 的字段 具体来说 我正在与ForeignKey 你应该先写一个数据迁移 http south aeracode org docs t
  • 为什么这个函数在额外读取内存时运行速度如此之快?

    我目前正在尝试了解 x86 64 上某些循环的性能属性 特别是我的 Intel R Core TM i3 8145U CPU 2 10GHz 处理器 具体来说 在循环体内添加一条额外的指令来读取内存几乎可以使性能提高一倍 而细节并不是特别重
  • 将 viewbag 从操作控制器传递到部分视图

    我有一个带有部分视图的 mvc 视图 控制器中有一个 ActionResult 方法 它将返回 PartialView 因此 我需要将 ViewBag 数据从 ActionResult 方法传递到 Partial View 这是我的控制器
  • 如何为React hooks(useState等)做流类型注解?

    我们应该如何将 Flow 类型注释与 React hooks 一起使用 例如useState 我尝试寻找一些如何实施它们的示例 但找不到任何东西 我试过这个 const allResultsVisible setAllResultsVisi
  • 为什么 strtok 会导致分段错误?

    为什么下面的代码给出了Seg 最后一行有问题吗 char m ReadName printf nRead String s n m Writes OK char token token strtok m 如前所述 读取字符串打印没有问题 但
  • 不同类型的指针可以互相分配吗?

    考虑到 T1 p1 T2 p2 我们可以将 p1 分配给 p2 或反之亦然吗 如果是这样 是否可以不使用强制转换来完成 或者我们必须使用强制转换 首先 让我们考虑不进行强制转换的分配 C 2018 6 5 16 1 1 列出了简单赋值的约束
  • 与文件名中的冒号“:”作斗争

    我有以下代码 用于加载大量 csv gz 并将它们转储到其他文件夹中 并将源文件名作为一列 object DailyMerger extends App def allFiles path File List File val parts
  • 无法在 Windows 10 上构建 Detectron2

    尽管 Windows 上的 Detectron2 没有官方支持 但有很多可用的说明 我尝试按照这些说明进行操作 但最终出现了相同的错误 这是我的设置 OS Windows 10 专业版 19043 1466 微软视觉工作室 2019 CUD

随机推荐

  • Typescript 将所有日期从接口转换为字符串

    是否可以全部改造Date类型定义从我的接口到string 因为它会自动转换为string关于 JSON 字符串化 interface Item key string value number created Date const item
  • 如何上传JAR到Nexus OSS 3?

    如何通过以下方式执行 jar 的上传curlNexus 3 我尝试使用链接提示但没有成功 这是我的尝试 curl v F r F releases hasPom true and F jar F file v12 1 0 1 pom xml
  • 查找已调用弹出菜单的 JTable 行

    我有一个 JTable 和一个特定于每一行的弹出菜单 我想计算用户右键单击鼠标 Windows L F 以调出弹出菜单的行 我为表创建了一个 MouseListener 因此它可以在单击时获取 MouseEvent 并在正确的位置显示弹出菜
  • 更改主详细信息导航xamarin表单中的汉堡图标

    我正在处理 Xamarin 表单 我需要在成功登录屏幕后显示主详细信息导航 我想更改默认的汉堡包图标 但无法更改它 请参阅下面我正在使用的代码 由于我的应用程序有登录屏幕 因此我不想在登录屏幕上显示任何导航 我只是将主页设置为app xam
  • ASP.NET MVC Controller.OnException 未被调用

    我有一个基本控制器类 我在其中重写 Controller OnException 处理程序方法 以便为将从此类继承的某些类型的控制器 这些是将返回 JSON 结果的 API 控制器 提供通用错误处理 当控制器引发异常时 永远不会调用 OnE
  • SQL - GROUP BY 和 COALESCE 的丑陋组合

    我有一个包含类似于以下数据的表 ID 状态 foo 创建日期 更新日期 我处理这个问题的时间越长 我的 SQL 就越难看 这告诉我我可能做错了什么 我想要的是每个状态的唯一列表 只要 foo 对于该状态始终相同 如果 foo 对于该州的所有
  • Windows Phone 7 (WP7) PhotoChooserTask 与裁剪

    我在许多应用程序中看到过这一点 但在文档或在线示例中找不到任何内容 当您调用 PhotoChooserTask 时 某些应用程序允许您调整大小 裁剪以仅使用该图像的一部分 通过显示白色矩形 我如何使用它并为目标图像设置自己的尺寸 您可以设置
  • 为什么 Collections.sort 使用 Mergesort 而 Arrays.sort 不使用?

    我正在使用 JDK 8 x64 为了Arrays sort 原语 我在Java文档中发现了以下内容 排序算法是双枢轴快速排序作者 弗拉基米尔 雅罗斯拉夫斯基 乔恩 本特利和约书亚 布洛赫 For Collections sort 对象 我找
  • 为什么在 Nestjs 中基于构造函数的注入优于基于属性的注入

    The Nestjs 文档描述注入依赖项的两种主要方法 基于构造函数 and 基于财产的注射 它还提到 在可能的情况下 基于构造函数的注入应优先于基于属性的注入 而无需任何说明原因 这有什么具体原因吗 还是只是某种代码风格指南 Someon
  • 如何使用 NSURLConnection 与 SSL 连接以获得不受信任的证书?

    我有以下简单的代码来连接到 SSL 网页 NSMutableURLRequest urlRequest NSMutableURLRequest requestWithURL url NSURLConnection sendSynchrono
  • struts2中使用ajax上传文件

    如何使用ajax在struts 2中上传文件 下载Struts2 jQuery 插件并像平常使用 Struts2 那样进行操作
  • 如何在vs2012中添加对程序集的引用

    我需要有关如何在 C 代码中正确添加程序集的帮助 我启动一个空白项目并尝试运行下面的简单代码 但存在引用错误 我知道默认情况下 system dll 包含在引用文件夹下 那么为什么它仍然抱怨 System Configuration未被引用
  • Android 中的向前或向后兼容性?

    我想知道 Android 是否提供任何类型的兼容性 即向前或向后 这意味着 就像在 Blackberry 中一样 如果使用 JDE 4 2 开发应用程序 那么该应用程序将在任何具有 OS 4 2 或更高版本的手机上运行 这意味着它具有向前兼
  • xslt 有 split() 函数吗?

    如何根据某些分隔符拆分字符串 给定一个字符串Topic1 Topic2 Topic3 我想根据分割字符串 生成 Topic1 Topic2 Topic3 在 XSLT 1 0 中 您必须构建一个递归模板 这个样式表
  • 如何在网站上使用表情符号字体?

    我已经下载了谷歌的 诺托彩色表情符号 字体 但无法使其工作 我对 Noto Sans Regular 等字体没有任何问题 但使用 Noto Color Emoji 字体时 我在 Firefox 在 Windows 10 上 中收到以下错误
  • WPF 窗口设置焦点

    我有一个 WPF 窗口 我只创建一次 然后 Show 和 Hide 多次 现在我正在寻找一种方法来将焦点设置在每个 Show 上的元素上 我可以在哪里以及如何执行此操作 只需对要聚焦的元素调用 Element Focus 即可 如果您的意思
  • 在 Java 中使用另一个类的私有方法

    我有两节课 public class Class1 public class Class2 private void simpleMethod In Class2我有私人方法simpleMethod 我想用它Class1在同一个项目中 我不
  • 在apache服务器上导入Pandas导致超时错误

    我有一个在 Apache 服务器上运行的 Django 项目 我安装了 pandas 并想用它来开始操作数据 然而发生了一些奇怪的事情 每当我使用import pandas在生产环境中 服务器会挂起并 一段时间后 抛出 408 超时错误 我
  • 使用自定义 URL 参数启动 VS2010 silverlight 调试会话

    当我调试 Silverlight 应用程序时 Visual Studio 将仅打开页面 没有额外的 URL 参数 因此 网址将如下所示 http localhost 65351 MyApp 但是 当有人导航到 URL 中带有额外参数的页面时
  • 使用 Room @Transaction 函数时 Android 仪器测试未运行结束

    我正在使用 AS 3 4 1 和运行 Android 9 的模拟器进行测试 当我使用以下测试时 以下测试将无法运行Room Dao Function annotated with Transaction in it class Recurr