Как получить доступ к статической переменной, инициализированной с @Mock при весенней загрузке в Junit - PullRequest
0 голосов
/ 06 ноября 2019

У меня есть класс компонентов ниже.

 @Component
 class ComponentClass{
     private static AnotherClass anotherClass;

     @Autowired
     private void setAnotherClass(AnotherClass a){
          anotherClass = a;
     }

     public AnotherClass getAnotherClass(){
          return anotherClass;
     }
}

@RunWith(MockitoJUnitRunner.class)
public class ComponentClassTest {

    @InjectMocks
    private ComponentClass componentClass;

    @Mock
    private AnotherClass anotherClass;

    @Test
    public void testGetAnotherClass() {
        Assert.assertNotNull(ComponentClass.getAnotherClass());
    }
}

Когда я пытаюсь запустить тестовый пример, метод getAnotherClass возвращает ноль. Может кто-нибудь помочь здесь, почему максимизированный экземпляр не возвращается при вызове метода getAnotherClass.

1 Ответ

0 голосов
/ 06 ноября 2019

Чтобы раскрыть @ m-deinum: в примере есть static поле с нестатическим установщиком. Это плохая практика по многим причинам (включая то, что Мокито не будет касаться этого). Spring по умолчанию гарантирует, что AnotherClass является одноэлементным, поэтому я предлагаю установить его с помощью параметра конструктора. И весна, и Мокито будут счастливы от этого.

private final AnotherClass anotherClass;
public ComponentClass(AnotherClass anotherClass) {
  this.anotherClass = anotherClass;
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...