Есть ли разница между выполнением DBUnit в качестве ПОЛЬЗОВАТЕЛЯ или ВЛАДЕЛЬЦА схемы - PullRequest
0 голосов
/ 17 октября 2011

В настоящее время я использую DBUnit для тестирования своих веб-сервисов.

Когда я указываю учетные данные пользователя db с ВЛАДЕЛЕЦОМ схемы, все работает просто отлично.

Если я изменю учетные данные БД для входа в систему как ПОЛЬЗОВАТЕЛЬ, я получу:

> [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.

ОБНОВЛЕНИЕ Итак, я обнаружил, что допустил ошибку, мой плохой.Тесты вообще не работают, когда я тестирую с учетными данными USER.

1 Ответ

1 голос
/ 17 октября 2011

Как именно вы создаете синонимы?

В 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';
...