Может ли JUnit 5 на самом деле внедрять экземпляры расширений?

#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-это буквально раздел, содержащий цитату, которую я включил в первый абзац вопроса, поэтому можно предположить, что я ее прочитал.