2014-12-30 6 views
0

Недавно я столкнулся с ситуацией, когда мы вводим int, значение которого объявляется в файле свойств.Как высмеять целые числа в классе

@Inject 
@ConfigurationParameter("someparameter") 
private int resetCount; 

Как я могу издеваться над этой переменной/зависимостью. Является ли это возможным?

На данный момент я удалил спецификатор доступа private, и с помощью объекта класса я установил его значение. Но что, если я хочу, чтобы оно было объявлено частным и все еще хотело вводить значения или издеваться над переменной?

Является ли инъекция основных типов данных хорошей практикой?

+1

Один из способов будет использовать отражение ... Сказав это, я бы попытаться сохранить геттер и сеттер, а также для частных полей. – SMA

+3

Это одна из причин, почему инъекция через конструктор предпочтительнее - это упрощает тестирование. –

+0

Да, у нас также возникла идея использовать метод сеттера или отражение. Но я не думаю, что нас это интересует. Затем я попытался использовать класс Integer вместо типа данных и высмеять класс. Затем Мокито дал исключение, что окончательные классы не могут быть издевались. –

ответ

0

ReflectionTestUtils класс, предоставляемый Spring Framework, с помощью которого вы можете установить любое поле класса независимо от его модификатора доступа.

ReflectionTestUtils.setField(yourClassName, "resetCount", 5); 

см мой ответ here

0

Наконец, я нашел решение. Существует класс, называемый WhiteBox в Mockito api, который может устанавливать внутреннее состояние объекта.

Here is an example how it is done.

Смежные вопросы