【问题标题】:How to construct org.jooq.Result for unit testing如何构造 org.jooq.Result 进行单元测试
【发布时间】:2020-09-16 07:11:03
【问题描述】:

我正在编写单元测试以使用 JOOQ 库从 Oracle DB 获取记录,我需要模拟 DSLContextfetch() 函数返回的数据。如何创建示例 Result<Record> 以由模拟函数返回?我用谷歌搜索了几个小时,但找不到答案。

【问题讨论】:

    标签: java jooq


    【解决方案1】:

    尝试使用 JOOQ 自己的模拟 API。这里是官方docs

    您可能希望得到类似的结果:

    final MockDataProvider myMockProvider = new MockDataProvider() {
        @Override
        public MockResult[] execute(final MockExecuteContext context) throws SQLException {
            final DSLContext context = DSL.using(SQLDialect.ORACLE);
            final Result<Record> resultRecord = context.newResult(YOUR_TABLE_HERE);
    
            // customize your record with needed fields
    
            resultRecord.add(context.newRecord(YOUR_TABLE_HERE));
    
            return new MockResult[] { new MockResult(1, resultRecord) };
        }
    };
    
    final DSLContext mockedDSL = DSL.using(new MockConnection(myMockProvider), SQLDialect.ORACLE);
    
    // here you go with your tests
    

    【讨论】:

      【解决方案2】:

      我也遇到过同样的问题,我不想拥有MockDataProvider,因为我正在测试 DAO 以外的其他东西。因此,我创建了一个简单的函数来将Record(或多个)转换为Result&lt;T&gt;

      请注意,这是在 Kotlin 中,但应该很容易将其翻译成 Java:

      val jooq = DSL.using(SQLDialect.POSTGRES)
      
      fun <T : Record> result(table: TableImpl<T>, vararg data: T): Result<T> {
          return jooq.newResult(table).apply { addAll(data) }
      }
      

      然后可以如下使用:

      result(TABLE_NAME, <a record>, <another record>)
      

      并且可以使用它们的构造函数来创建记录。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2016-09-10
        • 2010-09-26
        • 2012-06-28
        相关资源
        最近更新 更多