#java #junit5 #junit5-extension-model
Вопрос:
В документации для @RegisterExtension
упоминается что-то о внедрении экземпляра:
расширение будет зарегистрировано после создания экземпляра тестового класса и после того, как всем
TestInstancePostProcessor
s будет предоставлена возможность выполнить последующую обработку экземпляра теста (потенциально вводя экземпляр расширения, который будет использоваться, в аннотированное поле).
Есть ли в JUnit какие-либо постпроцессоры, которые могут автоматически выполнять это для расширений, или это просто говорит о том, что люди могут создать в будущем?
В нашем случае я обнаружил, что многие из наших расширений оказываются такими:
@RegisterExtension
public final TempFolderExtension temp = new TempFolderExtension();
@RegisterExtension
public final SomeFactoryExtension factory = new SomeFactoryExtension(temp);
Контейнер, подобный PicoContainer, может автоматически определять, как создавать экземпляры.
Было бы действительно здорово, если бы мы могли просто написать,
@RegisterExtension
public TempFolderExtension temp;
@RegisterExtension
public SomeFactoryExtension factory;
А остальное может заполнить либо процессор аннотаций, либо инжектор времени выполнения.
Зависимости между такого рода расширениями также влияют на порядок, в котором они должны выполняться.
Ответ №1:
Короткий ответ: Нет, это невозможно, при использовании @RegisterExtension
вам придется создавать экземпляр расширения вручную.
Читать https://junit.org/junit5/docs/current/user-guide/#extensions 5.2.2
Комментарии:
1. 5.2.2-это буквально раздел, содержащий цитату, которую я включил в первый абзац вопроса, поэтому можно предположить, что я ее прочитал.