目前我正在使用 DBUnit 来测试我的网络服务。
当我使用架构所有者指定数据库用户凭据时,一切正常。
如果我更改数据库凭据以作为用户登录,我会得到:
> [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。
更新 所以我发现我犯了一个错误。测试实际上并没有 当我使用用户凭据进行测试时,完全可以工作。
最佳答案
您到底是如何创建同义词的?
在 Oracle 中,同义词可以是公共(public)的(在这种情况下,它对所有用户可见)或私有(private)的(在这种情况下,它仅对同义词的所有者可见)。您正在创建公共(public)同义词吗?或者您正在创建私有(private)同义词?
公共(public)同义词是使用PUBLIC
关键字创建的
CREATE PUBLIC SYNONYM ens_mrm_configuration
FOR schema_owner.ens_mrm_configuration
而私有(private)同义词则不然
CREATE SYNONYM ens_mrm_configuration
FOR schema_owner.ens_mrm_configuration
如果您要创建私有(private)同义词,则需要在 USER
架构中创建同义词。
如果您以USER
身份登录,您可以运行此查询并发布结果
SELECT owner, object_name, object_type
FROM all_objects
WHERE object_name = 'ENS_MRM_CONFIGURATION';
关于java - 作为模式的用户或所有者运行 DBUnit 之间有区别吗,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7791864/