У меня есть сервис с таким атрибутом:
@Autowired
@Qualifier("test")
private String test;
Этот атрибут взят из контекстного XML-файла.
Я ничего не делаю в модульном тесте, возможно, это правильное поведение в модульном тесте. Но могу ли я издеваться над этим атрибутом, чтобы он стал значением?
Например:
when(test).thenReturn("a string");
Спасибо С уважением
Я не вижу, может ли это помочь. Даже если я опубликую свой тест String...
Почему вы автоматически подключаете строку? Это должно исходить из файла свойств. Обычно определение простых вещей, таких как строки/целые числа, как bean-компоненты, не является мудрым решением.
По этой ссылке есть пара ответов (плюс некоторое объяснение, почему приватные поля с автоматическим подключением могут вызвать проблемы); Ниже я постарался ответить на самые распространенные из них. @m-deinum: String - это вполне разумный тип bean-компонента, даже если он исходит из файла свойств.
Судя по вашему комментарию, можно сделать это поле общедоступным. Вы можете просто установить его позже:
myMock = Mock(MyClass)
myMock.test = "foobar"
Кроме того, вы можете добавить сеттер, оставив поле закрытым. Или вы можете попробовать @InjectMocks
или Spring ReflectionTestUtils
, оба из принятого ответа здесь.
Я не понимаю, потому что я уже тестировал, но с ReflectionTestUtils это прекрасно работает. Спасибо вам
Помогает ли это?