частные переменные равны нулю, которые назначаются с помощью @Value в случае весенней загрузки junit - PullRequest
0 голосов
/ 17 июня 2020

У меня есть класс java, для которого я должен написать тест junit.

@Service
class My {
    @Value("${emp.name}")
    private String name;

    public void printName() {
        StringBuilder sb = new StringBuilder(name);
        //do some stuff
    }
}

Теперь я пишу тестовый класс для этого java класса, как показано ниже.

@PrepareforTest({My.class})
public class MyTest {
   @InjectMocks
   My my;

   @Test
   public void printNameTest() {
       //Test code
   }
}

Проблема в том, что я получаю исключение с нулевым указателем на StringBuilder sb = new StringBuilder (name); и тест не работает.

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

Ответы [ 2 ]

0 голосов
/ 17 июня 2020

Нет аннотации, чтобы сообщить Mockito @InjectMocks, что нужно просто ввести это значение без каких-либо издевательств или шпионажа. давайте обработаем все с помощью springboot.

или имитируем ответ printName ()
0 голосов
/ 17 июня 2020

Не используйте поле Injection, а вместо этого передайте его в конструктор. Облегчает тестирование.

@Service
class My {

    private String name;

    public My(@Value("${emp.name}") String name) {
        this.name = name;
    }

    public void printName() {
        StringBuilder sb = new StringBuilder(name);
        //do some stuff
    }

}

В качестве альтернативы используйте ReflectionTestUtils. См .: { ссылка }

...