Quelqu'un peut-il expliquer ce que l'annotation @magentoDbIsolation fait pour un test d'intégration?

9

En parcourant les tests d'intégration écrits pour les modules de base, je vois de nombreuses instances de l'annotation @magentoDbIsolation enabledapparaître au-dessus des fonctions de test.

Il n'y a aucune mention de cela nulle part dans la documentation MTF, et même après avoir regardé, Magento\TestFramework\Annotation\DbIsolationje ne suis toujours pas très clair quant à son objectif.

Quelqu'un peut-il donner un aperçu? Merci.

brendanmckeown
la source

Réponses:

17

Si cette annotation est spécifiée, la transaction DB sera démarrée avant le test et annulée après. Cela peut être utile si aucun appareil DB n'est utilisé et que quelque chose est enregistré dans DB lors du test. Notez que cela @magentoDataFixtureencapsule également le test dans la transaction, donc pas besoin d'utiliser les deux annotations simultanément.
Et juste pour des raisons d'exhaustivité, la spécification @magentoDbIsolation disabledn'est utile que si le a @magentoDbIsolation enabledété spécifié sur une classe de test.

Alex Paliarush
la source
2

L'annotation @magentoDbIsolationest utilisée dans les tests d'intégration pour isoler les modifications de base de données apportées par les tests. En d'autres termes, si vous exécutez votre test et apportez des modifications à db et pendant l'exécution du test, vous demandez ces données à db dans une autre session:

  • avec @magentoDbIsolation enabledvous n'obtiendrez rien, car les données sont isolées dans la transaction.
  • avec @magentoDbIsolation disabledvous obtiendrez des données, car les données ne sont pas isolées.
  • sans aucune annotation, les tests d'intégration sont exécutés en mode non isolé.

à mon humble avis, pour modifier les données db, il est préférable d'utiliser l'annotation @magentoDataFixture, qui utilise l'isolement des données par défaut.

Arkadii Chyzhov
la source