Аннотация:Mock Autowired ExecutorService
У меня есть Spring @Component
, который использует autowired ExecutorService как работы бассейна. Я использую JUnit и Mockito для проверки функциональности компонента, и мне нужно высмеять эту службу-исполнитель. Это было тривиально для других автоподключенных членов - общий помощник, и, например, слой DAO легко издеваются, но мне нужна реальная реальная служба.
Код:
@RunWith(MockitoJUnitRunner.class)
public class MadeUpClassNameTest{
@Mock
private ExecutorService executor;
@Before
public void initExecutor() throws Exception{
executor = Executors.newFixedThreadPool(2);
}
@InjectMocks
private ASDF componentBeingAutowired;
...
Это само по себе не работает, результаты invokeAll()
всегда пустой список.
Попытка более явно издеваются метод исполнитель также не работает ...
@Test
public void myTestMethod(){
when(executor.invokeAll(anyCollection()))
.thenCallRealMethod();
...
}
Я получаю загадочно сформулированное исключение:
Вы не можете использовать аргумент matchers вне проверки или гася ,
(я думал, что это было раскорчевка?)
Я мог обеспечить способ thenReturn(Answer<>)
, но я хотел бы, чтобы убедиться, что код на самом деле работает с исполнителем, справедливый бит код посвящен отображению результатов фьючерсов.
Задача Как я могу предоставить реальную (или функционально используемую) службу-исполнитель? В качестве альтернативы, моя сложность в тестировании этого компонента является признаком того, что это плохой дизайн, нуждающийся в рефакторинге или, возможно, плохой тестовый сценарий?
Примечания Я хочу подчеркнуть, что моя проблема НЕ МОЖЕТЕ создать Mockito или Junit. Другие макеты и тесты работают правильно. Моя проблема специфична только для конкретного макета выше.
Использование: Junit 4,12, Mockito 1.10.19, Hamcrest 1,3
В таком случае я получаю 'org.mockito.exceptions.base.MockitoException: невозможно инициализировать аннотированное поле @Spy «someField». Mockito не может издеваться над этим классом: class java.util.concurrent.Executors $ FinalizableDelegatedExecutorService. Mockito может только высмеивать не-частные и незавершенные классы. Если вы не знаете, почему вы получаете эту ошибку, сообщите в список рассылки. Исключение: java.lang.IllegalStateException: ошибка при вызове java.lang.ClassLoader # findClass' –