目前我正在使用DBUnit来测试我的webservices。
当我使用模式的OWNER指定db用户凭据时,一切正常。
如果我将数据库凭据更改为以用户身份登录,我会得到:
> [Main Thread] ERROR org.dbunit.database.DatabaseDataSet - Table
> 'ens_mrm_configuration' not found in
> tableMap=org.dbunit.dataset.OrderedTableNameMap[_tableNames=[],
> _tableMap={}, _caseSensitiveTableNames=false]
我知道OWNER应该首先为我想访问的所有表授予SELECT,UPDATE和INSERT(所以我就是这样做了)我还创建了SYNONYMS来引用实际的表。最后这两个场景都有效,但第一次测试失败并出现此错误如果我以USER身份运行测试。
DBUnit如何处理这个有什么区别?我目前正在使用dbunit 2.4.8和SpringJUnit。
更新 所以我发现我弄错了。测试实际上没有 当我使用USER凭证进行测试时,可以正常工作。
答案 0 :(得分: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';