Невозможно внедрить макет ApplicationEventPublisher в @MicronautTest.JAVA

Программисты JAVA общаются здесь
Ответить
Anonymous
 Невозможно внедрить макет ApplicationEventPublisher в @MicronautTest.

Сообщение Anonymous »

Я активно использую ApplicationEventPublisher в своем приложении, и основным результатом выполнения некоторых методов является публикация событий с помощью ApplicationEventPublisher.
Я использую простую ловушку для событий в тестовой среде, чтобы собирать события и проверять их:

Код: Выделить всё

@Singleton
public class MessageListenerTestHelper {
private ConcurrentLinkedQueue queue = new ConcurrentLinkedQueue();

@Async
@EventListener
public void onEvent(Object event) {
queue.add(event);
}

public Queue getQueue() {
return queue;
}

public  Future getEventFromQueue(Class eventClass) {
CompletableFuture future = new CompletableFuture();
Executors.newSingleThreadScheduledExecutor().scheduleAtFixedRate(() -> {
Optional eventOpt = queue.stream()
.filter(eventClass::isInstance)
.findAny();
if (eventOpt.isPresent()) {
future.complete((T) eventOpt.get());
}
}, 100, 100, TimeUnit.MILLISECONDS);
return future;
}
}

Но мои тесты ненадежны — обычно они не работают в действиях GitHub, но работают на моем компьютере. Поэтому я хочу исправить это с помощью макета ApplicationEventPublisher. Но аннотация @Replaces не работает. Я пробовал это в тесте и на заводе, доступном только в тестовой среде, но ни то, ни другое не помогло.
Я собираюсь отказаться от использования аннотации @MicronautTest и внедрять макеты вручную. Но, может быть, есть другой выбор?

Подробнее здесь: https://stackoverflow.com/questions/674 ... ronauttest
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «JAVA»