Провести юнит-тест с базой данных H2 - PullRequest
0 голосов
/ 28 октября 2018

Я начинаю писать какой-то модульный тест с базой данных H2.

Поэтому я хочу создать таблицу из моего @ Entity.

Однако я всегда получаю следующую ошибкуmessage:

12: 40: 13.635 [main] WARN org.springframework.context.support.GenericApplicationContext - Исключительная ситуация при инициализации контекста - отмена попытки обновления: org.springframework.beans.factory.BeanCreationException:Ошибка создания компонента с именем «dataSource», определенным в at.wrk.fmd.config.JpaConfigTest: не удалось создать экземпляр компонента с помощью фабричного метода;

Таблица «ROLLETEST» не найдена;Оператор SQL:

INSERT INTO RolleTest (create_at, bezeichnung) ЗНАЧЕНИЯ (now (), 'ADMIN') [42102-197] java.lang.IllegalStateException: не удалось загрузить ApplicationContext

Вот мои классы:

JpaConfigTest

@Configuration
@EnableJpaRepositories
@PropertySource("application.propertiesTest")
@EnableTransactionManagement
public class JpaConfigTest {


@Autowired
private Environment env;

@Bean
public DataSource dataSource() {
    DataSource dataSource = new DriverManagerDataSource("jdbc:h2:mem:testdb;DB_CLOSE_DELAY=-1", "sa", null);
    new ResourceDatabasePopulator(new ClassPathResource("/import-test.sql")).execute(dataSource);

    return dataSource;
}
}

InMemoryDbTest:

@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(
  classes = { JpaConfigTest.class }, 
  loader = AnnotationConfigContextLoader.class)
@Transactional
@WebMvcTest
public class InMemoryDbTest {

@Resource
private StudentRepository studentRepository;

@Test
public void givenStudent_whenSave_thenGetOk() {
    Student student = new Student(1, "john");
    studentRepository.save(student);

    List<Student> student2 = studentRepository.findAll();
}
}

application.propertiesTest

server.port=8080
server.error.whitelabel.enabled=false

# H2
spring.datasource.driver-class-name=org.h2.Driver
spring.datasource.url=jdbc:h2:mem:testdb;DB_CLOSE_DELAY=-1
spring.datasource.username=sa
spring.datasource.password=sa

import-test.sql

INSERT INTO RolleTest(created_at, bezeichnung) VALUES (now(), 'ADMIN');

Может быть, кто-то может сказать мне, что мне здесь не хватает.

1 Ответ

0 голосов
/ 07 ноября 2018

Извините, что так поздно ответил, но я болел последние пару дней.Что я сделал неправильно, так это то, что я не знал о проведении здесь интеграционного теста.Таким образом, некоторые шаги должны были быть сделаны, прежде чем делать сам тест.Я скопировал application-test.properties к моему файлу application.properties.Затем я прокомментировал свой основной тестовый класс следующим образом:

@RunWith(SpringRunner.class)
@SpringBootTest
@AutoConfigureMockMvc
@ActiveProfiles("test")

Затем ApplicationContext запускается, создает мои таблицы в базе данных в памяти и я могу выполнять свои тесты.

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