Как управлять жизненным циклом экземпляров с TestInstanceFactory? - PullRequest
0 голосов
/ 31 августа 2018

Я использую JUnit 5.3.0-RC1, пытаясь реализовать расширение для нового интерфейса TestInstanceFactory. (Я хочу получить объекты из Weld для инъекции CDI и т. Д.)

Если я реализую TestInstanceFactory, я могу создавать свои собственные экземпляры. Если я также использую AfterEachCallback, я могу очистить их (выключить сварку) после каждого теста. Пока все хорошо.

Однако: для этого я должен предположить TestInstance.LifeCycle.PER_METHOD. Если в тестовом классе используется TestInstance.Lifecycle.PER_CLASS, мне придется обнаружить это и подождать до AfterAllCallback, прежде чем уничтожить сварку. Но ExtensionContext.getTestInstanceLifecycle объявлен как Optional, поэтому я не могу сказать, какой жизненный цикл активен.

Есть ли способ заставить JUnit просто сказать мне, когда уничтожить экземпляр? Было бы неплохо иметь расширение типа TestInstanceDestructor, которое вызывалось бы всякий раз, когда JUnit заканчивал использовать экземпляр теста.

Во-вторых, AfterEachCallback никогда не вызывается для @Disabled тестов, что означает, что я не могу очистить экземпляры, созданные с помощью моего TestInstanceFactory. Запуск Weld довольно дорог, поэтому в любом случае я бы пропустил эту работу для отключенных тестов. Можно ли как-то определить, какие экземпляры создаются для отключенных тестов?

1 Ответ

0 голосов
/ 01 сентября 2018

Но ExtensionContext.getTestInstanceLifecycle объявлен как Optional, поэтому я не могу сказать, какой Lifecycle активен.

Как обсуждалось в JUnit 5 Issue Tracker , вы можете надежно определить, какой режим Lifecycle активен.

Есть ли способ заставить JUnit просто сказать мне, когда уничтожить экземпляр?

Вам достаточно предыдущего предложения по реализации AfterEachCallback или AfterAllCallback на основе текущего Lifecycle.

Но имейте в виду, что вы всегда можете сохранить CloseableResource в ExtensionContext.Store, если хотите что-то очистить после закрытия текущего контекста . Вы также можете сохранить такой объект в parent Store, если ваше расширение в настоящий момент выполняется на уровне метода.

Можно ли как-то определить, какие экземпляры создаются для отключенных тестов?

Нет, я не думаю, что это возможно. TestInstanceFactory никогда не знает ничего о методе, который должен быть выполнен, так как TestInstanceFactory вызывается на уровне класса.

...