У меня есть следующий код:Mockito - Инъекция списка издевается
@Component
public class Wrapper
{
@Resource
private List<Strategy> strategies;
public String getName(String id)
{
// the revelant part of this statement is that I would like to iterate over "strategies"
return strategies.stream()
.filter(strategy -> strategy.isApplicable(id))
.findFirst().get().getAmount(id);
}
}
@Component
public class StrategyA implements Strategy{...}
@Component
public class StrategyB implements Strategy{...}
Я хотел бы создать тест для его использования Mockito. я написал тест следующим образом:
@InjectMocks
private Wrapper testedObject = new Wrapper();
// I was hoping that this list will contain both strategies: strategyA and strategyB
@Mock
private List<Strategy> strategies;
@Mock
StrategyA strategyA;
@Mock
StrategyB strategyB;
@Test
public void shouldReturnNameForGivenId()
{ // irrevelant code...
//when
testedObject.getName(ID);
}
Я получаю NullPointerException на линии:
filter(strategy -> strategy.isApplicable(id))
, в котором говорится, что список «стратегии» инициализируется, но пуста. Есть ли способ, которым Мохито будет вести себя так же, как Весна? Автоматическое добавление всех экземпляров, реализующих интерфейс «Стратегия» к списку?
Btw У меня нет никаких сеттеров в классе Wrapper, и я хотел бы оставить его таким образом, если это возможно.
Томас, весна как-то знает .. Так что мне было интересно, если Mockito может последовать та же идея. Кроме того, я не хочу добавлять установщик setStrategies в класс Wrapper. – fascynacja
Весна знает либо путем сообщения (контекст приложения), либо по соглашению (например, Типы). Но я уверен, что Spring также не может подключить общие списки. Информация типа также недоступна во время выполнения, поскольку компилятор не записывает ее в байт-код из-за фазы стирания стирания. Так что я думаю, что невозможно создать издевательский список, содержащий mocks без указания/программирования. –
Весна может подключить пример класса «Wrapper», введя стратегию A и бит стратегии. Контекст приложения строится только на основе аннотаций, поэтому я надеялся, что Мокито сможет сделать то же самое. – fascynacja