Kann jemand erklären, was die Annotation @magentoDbIsolation für einen Integrationstest bewirkt?

9

Wenn ich mir die für die Kernmodule geschriebenen Integrationstests ansehe, sehe ich, dass viele Instanzen der Anmerkung @magentoDbIsolation enabledüber den Testfunktionen erscheinen.

In der MTF-Dokumentation wird dies nirgends erwähnt, und selbst nach dem Betrachten Magento\TestFramework\Annotation\DbIsolationbin ich mir noch nicht ganz sicher, wozu es dient.

Kann jemand einen Einblick geben? Vielen Dank.

brendanmckeown
quelle

Antworten:

17

Wenn diese Anmerkung angegeben wird, wird die DB-Transaktion vor dem Test gestartet und danach zurückgesetzt. Dies kann hilfreich sein, wenn keine DB-Fixtures verwendet werden und im Test etwas in der DB gespeichert wird. Beachten Sie, dass @magentoDataFixtureder Test auch in eine Transaktion eingeschlossen wird, sodass nicht beide Anmerkungen gleichzeitig verwendet werden müssen.
Der Vollständigkeit halber ist die Angabe @magentoDbIsolation disablednur dann sinnvoll, wenn die @magentoDbIsolation enabledin einer Testklasse angegeben wurde.

Alex Paliarush
quelle
2

Die Anmerkung @magentoDbIsolationwird in Integrationstests verwendet, um durch Tests vorgenommene DB-Änderungen zu isolieren. Mit anderen Worten, wenn Sie Ihren Test ausführen und einige Änderungen an db vornehmen und während der Testausführung diese Daten von db in einer anderen Sitzung anfordern:

  • Mit @magentoDbIsolation enabledIhnen erhalten Sie nichts, da Daten in der Transaktion isoliert werden.
  • mit erhalten @magentoDbIsolation disabledSie Daten, weil Daten nicht isoliert sind.
  • ohne Annotation werden Integrationstests im nicht isolierten Modus ausgeführt.

Imho, um Datenbankdaten zu ändern, ist es besser, Annotation zu verwenden @magentoDataFixture, die standardmäßig die Datenisolation verwendet.

Arkadii Chyzhov
quelle