2014-06-16 34 views
1

我有一個問題,使用jOOQ的MockDataProvider來模擬單元測試中的SQL JOIN。爲jOOQ單元測試創​​建一個像對象的任意表

使用jOOQ實現的JOIN選擇包含UUID的單個列。因此結果類型爲Result<Record1<UUID>>。在相關的單元測試中,我想用MockDataProvider來嘲笑這個結果,但是我找不到合適的方法來初始化Result,因爲我找不到像對象那樣創建表的方法,我可以將它傳遞給newResult方法。我知道在DSL中有一些table方法,但簽名對我的用例來說似乎是錯誤的。

此外由於單元測試在此時不能運行,所以我不確定我創建UUID字段的方式是否正確。

這是我的代碼:

private class MyProvider implements MockDataProvider { 

    @Override 
    public MockResult[] execute(final MockExecuteContext ctx) throws SQLException { 
     final MockResult[] mockResults = new MockResult[1]; 
     final DSLContext db = DSL.using(SQLDialect.POSTGRES); 
     final Result<Record1<UUID>> result = db.newResult(<some table object here>); 
     final Field<UUID> uuidField = DSL.fieldByName(UUID.class, "uuid"); 
     final Record1<UUID> record = db.newRecord(uuidField); 
     record.setValue(uuidField, ID); 
     result.add(record); 
     mockResults[0] = new MockResult(1, result); 

     return mockResults; 
    } 
} 

回答

1

我懷疑這是本質上作爲一個在jOOQ用戶組在這裏同樣的問題:

https://groups.google.com/forum/#!topic/jooq-user/h4pfIHjmBpo

總之,有一個方法將被添加到jOOQ 3.4(使用issue #3139),以幫助您爲任意Record類型創建此類Result對象。與此同時(在發佈jOOQ 3.4之前),你將不得不通過反思創建一個新的org.jooq.impl.ResultImpl

+0

非常感謝。所以我會等3.4 :-) – spa

相關問題