Spring Boot не может найти мой класс с автопроводкой (члены с автопроводкой должны быть определены в допустимом компоненте Spring) - PullRequest
0 голосов
/ 24 июня 2019

Я пытаюсь использовать аннотацию Spring в autowire в моем тестовом классе, чтобы внедрить экземпляр класса.

package com.mycom.mycust.processing.tasks.references;

public class ReferenceIdentifierTest {

    @Autowired
    private FormsDB formsDB;

    @PostConstruct
    @Test
    public void testCreateTopLevelReferencesFrom() throws Exception {
        ReferenceIdentifier referenceIdentifier = new ReferenceIdentifier(formsDB);
    }
}

Это класс FormsDB:

package com.mycom.mycust.mysql;

import org.springframework.stereotype.Component;
import java.sql.SQLException;

@Component
public class FormsDB extends KeyedDBTable<Form> {

    public FormsDB(ConnectionFactory factory) throws SQLException {
        super(factory.from("former", new FormsObjectMapper()));
    }
}

А вот класс SpringBootApplication:

package com.mycom.mycust.processing;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.context.annotation.ComponentScan;

@SpringBootApplication
@ComponentScan("com.mycom.mycust")
public class Processing implements CommandLineRunner {
    // Code
}

Когда я запускаю тест, formsDB равен нулю.Поскольку я использовал аннотацию PostConstruct в тестовой функции, я думаю, что FormsDB не может быть автоматически подключен из-за отсутствия класса.Также имеется предупреждение IntelliJ для аннотации Autowired в тестовом классе: Autowired members must be defined in valid Spring bean (@Component|@Service...).Но я поместил аннотацию Component над классом FormsDB, а также поместил путь com.mycom.mycust в аннотацию ComponentScan приложения SpringBootApplication.Поэтому я не понимаю, почему он не может найти класс.

Что здесь не так?

1 Ответ

3 голосов
/ 24 июня 2019

В ваших тестовых вызовах отсутствуют некоторые важные аннотации для работы автопроводки:

@SpringBootTest
@RunWith(SpringRunner.class)
public class ReferenceIdentifierTest {

    @Autowired
    private FormsDB formsDB;

    @Test
    public void testCreateTopLevelReferencesFrom() throws Exception {
        ReferenceIdentifier referenceIdentifier = new ReferenceIdentifier(formsDB);
    }
}

также вы можете удалить @PostConstruct, который не имеет смысла в тесте.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...