Может кто-нибудь объяснить, что делает аннотация @magentoDbIsolation для интеграционного теста?

9

Просматривая интеграционные тесты, написанные для основных модулей, я вижу, что много экземпляров аннотации @magentoDbIsolation enabledпоявляются над тестовыми функциями.

Там нет упоминания об этом нигде в документации MTF, и даже после просмотра Magento\TestFramework\Annotation\DbIsolationя до сих пор не совсем ясно, какова его цель.

Кто-нибудь может дать некоторое представление? Спасибо.

brendanmckeown
источник

Ответы:

17

Если указана эта аннотация, транзакция БД будет запущена перед тестированием и откатана после нее. Это может быть полезно, если не используются фиксаторы БД и что-то сохраняется в БД в тесте. Обратите внимание, что @magentoDataFixtureтакже оборачивает тест в транзакции, поэтому нет необходимости использовать обе аннотации одновременно.
И просто для полноты, указание @magentoDbIsolation disabledполезно только в том случае, если оно @magentoDbIsolation enabledбыло указано в тестовом классе.

Алекс Палиаруш
источник
2

Аннотация @magentoDbIsolationиспользуется в интеграционных тестах для выделения модификаций БД, сделанных тестами. Другими словами, если вы запустите свой тест и внесете некоторые изменения в базу данных, а во время исключения теста вы запросите эти данные из базы данных в другой сессии:

  • с @magentoDbIsolation enabledвами ничего не получите, потому что данные изолированы в транзакции.
  • с @magentoDbIsolation disabledвами получат данные, потому что данные не изолированы.
  • без каких-либо аннотаций интеграционные тесты выполняются в неизолированном режиме.

imho, для изменения данных в БД лучше использовать аннотацию @magentoDataFixture, которая по умолчанию использует изоляцию данных.

Аркадий Чижов
источник