По сути, вы создали сложный для тестирования код , полагаясь на
protected static final ExecutorService EXECUTOR = Executors.newFixedThreadPool(1);
Чтобы проверить это, вам потребуется использовать темную магию PowerMock (ito), чтобы получить контроль над этимвызов статического метода newFixedThreadPool(1)
здесь.Теоретически, это хорошо, и посмотрите, см., Например, здесь .
Но: обычно, когда вы проводите достойное модульное тестирование в средах на базе Spring, вы, вероятно, уже используете другого тестового прогона, чтобы заставить эту вещь @AutoWired работать в вашей тестовой настройке.Добавление PowerMock (ito) делает это намного более сложным и подверженным ошибкам.
Таким образом, real ответ таков: переделайте свой дизайн, чтобы не полагалсяна этом статическом вызове метода.Если вы превратите эту вещь в нормальное поле, вы сможете использовать «стандартные» механизмы инъекции мокито, как указано ниже .
Наконец, я бы тожеПредлагаю заглянуть в тот же исполнитель потока .Значение: не издевайтесь над сервисом, а вставляйте конкретный экземпляр сервиса, который просто вызывает ваш код в том же потоке.Тогда вы получите гораздо больше охвата тестированием, но избежите большинства проблем с многопоточностью, которые обычно вызывают головную боль в модульных тестах.