Создание объектов, которые реализуют интерфейсы JpaRepo через Autowiring в JUnit? - PullRequest
0 голосов
/ 19 сентября 2019

Мне поручено написание классов JUnit.Для этого мне нужно создать объект, который реализует интерфейс, который расширяет org.springframework.data.jpa.repository.JpaRepository (называемый "KanjiRepo"), но в этом приложении нет классов, реально реализующих KanjiRepo .

Вместо new все объекты, которые реализуют KanjiRepo , похоже, создаются с помощью @Autowiring.

Интерфейс KanjiRepo является членом пакета, который имеет только интерфейсы, и все они расширяют org.springframework.data.jpa.repository.JpaRepository .

[ вопрос ] Не думаю, что понимаю проблему.Может кто-нибудь сказать мне, если то, что я только что сказал, звучит правильно.В моем junit, я также использую @Autowire для создания объектов, которые реализуют интерфейсы в том же пакете, что и KanjiRepo ? Поддержание 2 отдельных Контекстов приложения потребуется в качестве последнего шага?

1 Ответ

0 голосов
/ 19 сентября 2019

Я думаю, что Autowiring KanjiRepo достаточно в вашем тестовом классе, если вы не аннотируете свой репозиторий как @ Repository.

@Repository
public interface KanjiRepo extends JpaRepository....

Если у вас есть @ Repository аннотация поверх KanjiRepo и если вы аннотировали свой основной класс или класс конфигурации для автоматического сканирования bean-компонентов;Spring будет успешно обрабатывать создание и автоматическое подключение bean-компонентов.

Пожалуйста, проверьте для сканирования компонентов

@SpringBootApplication
// or  @ComponentScan
public class Application {
    public static void main(String[] args) {
        SpringApplication.run(Application.class, args);
    }
}

И затем вы можете создать свой тестовый класс с помощью следующего кода:

@Autowired
KanjiRepo repo;

@Test
public void testFindById() {
    Kanji instance = repo.findById(0L);
    assert.....
}

должно быть в порядке.

Может ли приложение и JUnit использовать одни и те же файлы конфигурации?

Собственно, так и есть.Но если вы выполняете компонентное сканирование, вам не нужно об этом беспокоиться.Spring будет обрабатывать, где находится ваш bean-компонент, и он должен автоматически подключаться.

Могу ли я также использовать @Autowire для создания объектов, реализующих интерфейсы в том же пакете, что и KanjiRepo?

Spring выполнит сканирование компонентов и определит, где находится ваш репозиторий, так что вам не нужно беспокоиться о том, где вы находите свой репозиторий.

...