Ошибка @Autowired при @SpringBootTest - PullRequest
0 голосов
/ 09 марта 2019

Я учусь запускать @SpringBootTest «правильным способом», но столкнулся с проблемой с автопроводкой в ​​моих тестовых классах (в каталоге «src / test / java»):

У меня есть классГрафики, которые аннотируются @Component в пакете под "src / main / java":

@Component
public class Graphs {
  ....
}

Затем я создал тестовые классы под "src / test / java".Один из них:

@SpringBootTest
public class GraphsTest {   
   @Test
   public void testRun () {
      Graphs graph = new Graphs(); // Using new to create an object
      if (graph==null) {
        System.out.println("It's null");
      } else {
        System.out.println("It's not null");
      }         
   }
...

Когда я тестирую запуск метода «testRun», он выдает «Это не ноль», как и ожидалось.

После модульных тестов я хотел внедрить «график», так как класс Graphs был аннотирован @Component, таким образом, bean-компонент должен быть доступен для автопроводки:

@SpringBootTest
public class GraphTest {
   @Autowired
   private Graphs graph;    // auto inject a bean graph 

   @Test
   public void testRun () {
     if (graph==null) {
        System.out.println("it's null");
     } else {
        System.out.println("it's not null");
     }
   }
 ....

Теперь с автопроводкой, «testRun»«всегда производится:« это ноль », даже когда я пытался выполнить следующее (« xxxxxx »- полное имя пакета, содержащего файл Graphs.java):

  1. добавление @Import (xxxxxx / Graphs).class)
  2. добавление @ComponentScan ("xxxxxxx")
  3. копирование файла Graphs.java в тестовый пакет
  4. Добавление @Bean в TestConfiguration.javaв тестовом пакете.

    @Bean public Graphs graph () { return new Graphs(); }

Я начал подозревать, что я что-то неправильно понял или пропустил при настройке среды тестирования Spring Boot: неэто @SpringBootTest все, что мне нужно для начала работы?

1 Ответ

0 голосов
/ 09 марта 2019

Вы забыли добавить @RunWith(SpringRunner.class) выше GraphTest.

SpringRunner - это псевдоним для SpringJUnit4ClassRunner, который отвечает, помимо прочего, за загрузку TestContextManager (см. docs ).Без этого контекст вашего приложения не был бы загружен для тестов.

...