2015-08-26 5 views
0

У меня есть приложение Spring загрузки с конфигурацией:Использование Spring JpaRepository в тесте

@EnableWebSecurity 
@EnableGlobalMethodSecurity(securedEnabled=true, prePostEnabled=true) 
@EnableJpaRepositories(basePackages = "com.site.data.repository") 
@EntityScan(basePackages = "com.site.data.entity") 
@ComponentScan(basePackages = "com.*") 
@SpringBootApplication 
public class WebSecurityConfig extends WebSecurityConfigurerAdapter { 

И в resources папке есть application.properties файл:

spring.datasource.url=... 
spring.datasource.username=... 
spring.datasource.password=... 
spring.datasource.driverClassName=... 
#... 

Проблема:

I попробуйте сделать новый класс, который добавит некоторые записи в базу данных. Я думал, что лучшим решением является класс тестирования JUnit. Поэтому, если кто-то хочет подать мою базу данных, он может просто запустить этот конкретный тест:

@RunWith(SpringJUnit4ClassRunner.class) 
@ContextConfiguration(classes = WebSecurityConfig.class) 
public class DataFeeder { 
    @Autowired 
    MyRepository myRepository; 

    @Test 
    public void feedDB() { 
     MyEntity entity = new MyEntity(); 
     myRepository.saveAndFlush(entity); 
    } 
} 

Но эта конфигурация не работает. Конечно, все репозитории отлично работают в проекте. Но во время выполнения теста я получаю сообщения о том, что все таблицы не существуют. Например, для SOME_TABLE:

Table "SOME_TABLE" not found; SQL statement: 

Я видел много учебников о том, как проверить JpaRepository, но я не хочу сделать тест, добавить некоторые элементы и удалить его после испытательного конца. Я просто хочу сохранить некоторые данные в базе данных (но в функции @Test)

Что не так с моей конфигурацией?

+1

Попробуйте использовать '@ SpringApplicationConfiguration' вместо' @ ContextConfiguration' – Jens

+0

@Jens К сожалению, это не меняет ситуацию. Я меняю уровень журнала, и первое сообщение: 'hibernate.properties not found'. Поэтому я подозреваю, что Spring не видит application.properties в этом тестовом классе. EDIT: нет hibernate.properites довольно хорошо, потому что при обычном запуске приложения это тоже происходит. – jsosnowski

+0

@Jens Прошу прощения. Ты прав. Ваше предложение верное. Когда я изменяю (правильно) на '@ WebIntegrationTest', все работает нормально. Если вы хотите, ответьте, и я приму это. – jsosnowski

ответ

1

@SpringApplicationConfiguration вместо @ContextConfiguration. это необходимо для тестирования приложений Spring-boot.