Не удалось запустить тест на весенней загрузке из-за сбоя внедрения зависимостей персистентности - PullRequest
0 голосов
/ 18 февраля 2019

У меня есть мое весеннее загрузочное приложение java, и я хотел бы написать несколько тестов, используя mockmvc;так что это класс тестирования:

@RunWith(SpringRunner.class)
@WebMvcTest(controllers = {IndexController.class})
@ComponentScan(basePackages={"com.sherlock.discoteque"})
@EnableJpaRepositories("com.sherlock.discoteque.repository")
@EntityScan(basePackages={"com.sherlock.discoteque"})
public class DiscotequeApplicationTests {

private MockMvc mockMvc;

@Autowired
private WebApplicationContext webApplicationContext;

@Before
public void setup() {
    this.mockMvc = MockMvcBuilders.standaloneSetup(webApplicationContext).build();
}

@Test
public void testAlbumInfo() throws Exception{
   this.mockMvc.perform(get("/")).andExpect(status().isOk());
}

}

, но при выполнении кода у меня появляется следующее сообщение об ошибке:

Поле albumRepository в com.Для sherlock.discoteque.controller.AlbumController требуется компонент типа 'javax.persistence.EntityManagerFactory', который не может быть найден.

Точка внедрения имеет следующие аннотации: - @ org.springframework.beans.factory.annotation.Autowired (обязательно = true)

Действие:

Подумайте об определении bean-компонента типа 'javax.persistence.EntityManagerFactory' в вашей конфигурации.... Вызвано: org.springframework.beans.factory.UnsatisfiedDependencyException: Ошибка создания бина с именем 'albumController': Неудовлетворенная зависимость, выраженная через поле 'albumRepository';вложенное исключение: org.springframework.beans.factory.BeanCreationException: Ошибка создания компонента с именем 'albumRepositoryImpl': не удалось внедрить зависимости персистентности;вложенное исключение - org.springframework.beans.factory.NoSuchBeanDefinitionException : нет доступного квалифицирующего компонента типа 'javax.persistence.EntityManagerFactory'. Причины: org.springframework.beans.factory. beanCreationException: ошибка: * ошибка 101 *'albumRepositoryImpl': не удалось внедрить зависимости персистентности; вложенным исключением является org.springframework.beans.factory.NoSuchBeanDefinitionException: нет доступного квалифицирующего компонента типа 'javax.persistence.EntityManagerFactory'

10 *странно, учитывая тот факт, что без класса тестирования все работает нормально.Это класс AlbumRepositoryImpl
public class AlbumRepositoryImpl implements AlbumRepositoryCustom {

private final static String RECENT_ALBUMS_QUERY = "select * from album order by createdate desc limit ?";

@PersistenceContext
public EntityManager entityManager;

@Override
public List<Album> getRecentAlbums(int size) {
    if(size<1){
        throw new IllegalArgumentException();
    }
    Query query = entityManager.createNativeQuery(RECENT_ALBUMS_QUERY, Album.class);
    query.setParameter(1, size);
    return query.getResultList();
}
}

, и внутри AlbumController у меня есть атрибут

   @Autowired
private AlbumRepository albumRepository;

, и у меня также есть интерфейс AlbumRepository (расширенный от JpaRepository).Я действительно не знаю, что делать, чтобы веб-приложение работало на тесте, кто-нибудь может мне помочь?

Ответы [ 2 ]

0 голосов
/ 18 февраля 2019

Попробуйте установить профиль весенней загрузки с аннотацией - @ActiveProfiles ("you_profile")

0 голосов
/ 18 февраля 2019

В примере кода вы пытаетесь автоматически связать контекст, однако вы не предоставили тестовую конфигурацию.

В вашем проекте вы определили конфигурацию диспетчера сущностей JPA, но в тестовом файле вы этого не предоставляетеИнформация.Spring не сможет запустить контейнер, пока вы не предоставите необходимую конфигурацию в тестовом классе.

Вы можете взять идею из https://www.petrikainulainen.net/programming/spring-framework/integration-testing-of-spring-mvc-applications-configuration/

...