Как я могу издеваться над атрибутом @autowired @Qualifier в службе?

У меня есть сервис с таким атрибутом:

@Autowired
@Qualifier("test")
private String test;

Этот атрибут взят из контекстного XML-файла.

Я ничего не делаю в модульном тесте, возможно, это правильное поведение в модульном тесте. Но могу ли я издеваться над этим атрибутом, чтобы он стал значением?

Например:

when(test).thenReturn("a string"); 

Спасибо С уважением

Помогает ли это?

crusy 09.04.2019 13:27

Я не вижу, может ли это помочь. Даже если я опубликую свой тест String...

anubis 09.04.2019 13:33

Почему вы автоматически подключаете строку? Это должно исходить из файла свойств. Обычно определение простых вещей, таких как строки/целые числа, как bean-компоненты, не является мудрым решением.

M. Deinum 09.04.2019 13:43

По этой ссылке есть пара ответов (плюс некоторое объяснение, почему приватные поля с автоматическим подключением могут вызвать проблемы); Ниже я постарался ответить на самые распространенные из них. @m-deinum: String - это вполне разумный тип bean-компонента, даже если он исходит из файла свойств.

crusy 09.04.2019 13:52
1
4
1 064
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

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

myMock = Mock(MyClass)
myMock.test = "foobar"

Кроме того, вы можете добавить сеттер, оставив поле закрытым. Или вы можете попробовать @InjectMocks или Spring ReflectionTestUtils, оба из принятого ответа здесь.

Я не понимаю, потому что я уже тестировал, но с ReflectionTestUtils это прекрасно работает. Спасибо вам

anubis 09.04.2019 13:55

Другие вопросы по теме