Рекомендуемый способ удаления @DataJpaTest при использовании вместе с @SpringBootTest - PullRequest
3 голосов
/ 05 июня 2019

У нас есть приложение, которое использует Spring Boot 2.0. Мы находимся в процессе переноса его в JDK11 из JDK8. Это также позволило нам обновить Spring Boot с 2.0 до 2.1. После прочтения журнала изменений выяснилось, что нам нужны были какие-то серьезные изменения.

Теперь проблема заключается в том, что некоторые тестовые классы отмечены как @SpringBootTest и @DataJpaTest. Согласно this , а также документации, мы не должны использовать оба вместе, и вместо этого мы изменили @DataJpaTest на @AutoConfigureTestDatabase. Вот как выглядит код:

@RunWith(SpringRunner.class)
@SpringBootTest(classes = {A.class, B.class}, properties = {
    "x=xxx",
    "y=yyy"
})
@AutoConfigureTestDatabase  // Used to be @DataJpaTest
@EnableJpaRepositories("com.test")
@EntityScan("com.test")
public class Test {

    @TestConfiguration
    public static class TestConfig {
        // Some beans returning
    }
    // Tests
}

Теперь мы получаем следующую ошибку:

NoSuchBeanDefinitionException: No bean named 'entityManagerFactory' available

Итак, согласно этому ответу , мы сделали что-то вроде этого:

@EnableJpaRepositories(basePackages="com.test", entityManagerFactoryRef="entityManagerFactory")

Даже после этого мы все равно получаем ту же ошибку. Это правильный способ удалить @DataJpaTest? Или нам нужно удалить @SpringBootTest и сделать что-то еще? Любое руководство очень ценится.

1 Ответ

1 голос
/ 11 июня 2019

Тестовый класс аннотируется @DataJpaTest и @ ContextConfiguration

@RunWith(SpringRunner.class)
@DataJpaTest
@ContextConfiguration(locations = { "classpath:test-context.xml" })
public abstract class AbstractTestCase {

    protected static final Logger LOG = LoggerFactory.getLogger(AbstractTestCase.class);

}

Мы определили test-context.xml. Это потому, что тестовый модуль изолирован от всех других модулей (проект с несколькими модулями maven). В test-context.xml мы определили компонентное сканирование для базового пакета.

<context:component-scan base-package="de.example.base.package" />
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...