2011-10-17 18 views
0

當前我正在使用DBUnit來測試我的web服務。作爲用戶或架構的所有者運行DBUnit是否存在差異

當我使用模式的OWNER指定數據庫用戶憑證時,一切正常。

如果我改變數據庫憑據登錄作爲一個用戶,我得到:

> [Main Thread] ERROR org.dbunit.database.DatabaseDataSet - Table 
> 'ens_mrm_configuration' not found in 
> tableMap=org.dbunit.dataset.OrderedTableNameMap[_tableNames=[], 
> _tableMap={}, _caseSensitiveTableNames=false] 

我知道的所有者應首先授予SELECT,UPDATE和INSERT因爲我要訪問的所有表(所以我這樣做)我也創建了SYNONYMS來引用實際的表。最後這兩個場景的工作,但第一個測試失敗,這個錯誤如果我作爲一個用戶運行測試。

那麼DBUnit是如何處理這個問題的?我目前正在使用dbunit 2.4.8和SpringJUnit。

UPDATE 所以我發現我犯了一個錯誤我的壞。當我使用USER憑證進行測試時,測試實際上並不是 。

回答

1

準確地說你是如何創建同義詞?

在Oracle中,同義詞可以是公共的(在這種情況下,它對所有用戶都是可見的)或私有的(在這種情況下,它只對同義詞的所有者可見)。你正在創建公共同義詞嗎?或者你正在創建私人同義詞嗎?使用PUBLIC關鍵字

CREATE PUBLIC SYNONYM ens_mrm_configuration 
    FOR schema_owner.ens_mrm_configuration 

創建

公共同義詞,而私人同義詞是不是

CREATE SYNONYM ens_mrm_configuration 
    FOR schema_owner.ens_mrm_configuration 

如果要創建私有同義詞,同義詞需要在USER架構中創建。

如果你登錄爲USER,可以在運行此查詢和發佈結果

SELECT owner, object_name, object_type 
    FROM all_objects 
WHERE object_name = 'ENS_MRM_CONFIGURATION'; 
+0

感謝賈斯汀,這個問題解決了! :) –

相關問題