Целочисленная переменная @Value в Spring Controller вызывает ошибку jUnit (jUnit не использует эту переменную) - PullRequest
1 голос
/ 10 апреля 2020

У меня странная ошибка в моем jUnit для контроллера Spring MVC, который имеет переменную класса @Value Integer:

@Value("${max.insert.participants.batch.size}")
private Integer maxInsertParticipantsBatchSize;

Настройка происходит из файла свойств ( все остальные настройки также считываются из него правильно)

max.insert.participants.batch.size=1000

Это переменная из файла свойств. не используется или проверяется в jUnit, но jUnit завершается неудачно с:

12:38:21 Caused by: java.lang.NumberFormatException: For input string: "${max.insert.participants.batch.size}"
12:38:21    at java.lang.NumberFormatException.forInputString(NumberFormatException.java:65) ~[?:?]

Как только я меняю тип @Value на String или Boolean JUnit начинает работать. Например,

@Value("${max.insert.participants.batch.size}")
private String maxInsertParticipantsBatchSize;

Еще раз, jUnit не использует эту переменную. Он используется только в реальном приложении.

Ответы [ 2 ]

0 голосов
/ 11 апреля 2020

Если ваш контрольный пример является модульным, то это не сработает. Поскольку контекст весны не инициализируется с помощью модульного теста. Вы можете использовать значение этой переменной в модульном тесте, установив значение переменной следующим образом.

ReflectionUtils.setField(fieldName, object, value);

Если ваш тестовый пример представляет собой тестовый пример компонента, в котором инициализируется контекст Spring, вам необходимо указать значение в файле свойств приложения, например:

max.insert.participants.batch.size:3

Вы также можете указать значение по умолчанию, например:

@Value("${max.insert.participants.batch.size:3}") private Integer maxInsertParticipantsBatchSize;

Значение по умолчанию будет перезаписано значением, указанным в файле свойств приложения.

0 голосов
/ 11 апреля 2020

Примечание: я думаю, что вы не отправляете значение в свойстве max.insert.participants.batch.size, которое является целым числом.

Например:

Предположим, если для свойства max.insert.participants.batch.size установлено значение 6 .

max.insert.participants.batch.size = 6 

Работает приведенный ниже код.

@Value("${max.insert.participants.batch.size}")
private Integer maxInsertParticipantsBatchSize;

Но если вы отправите нецелое значение, например:

max.insert.participants.batch.size = six

Приведенный ниже код завершится ошибкой. давая вам java.lang.NumberFormatException, потому что приведение типов не удается.

@Value("${max.insert.participants.batch.size}")
private Integer maxInsertParticipantsBatchSize;

Я протестировал с демонстрационным кодом. Это работает. Проблема где-то еще. Пожалуйста, проверьте классы ApplicationContext и Spring Component.

...