2017-02-09 5 views
3

Я пытаюсь написать тест для одной из моих служб. Служба использует автономный репозиторий, который использует jdbcTemplate для доступа к БД. Проблема в том, что тест фактически помещает данные в реальную БД.
Вот мой тестовый класс:Служба тестирования SpringBoot (с использованием репозитория с JDBCTemplate)

@SpringApplicationConfiguration(Application.class) 
@SpringBootTest(classes = { UserServiceImpl.class, UserService.class }) 
@RunWith(SpringJUnit4ClassRunner.class) 
public class UserServiceTest { 
@Autowired UserService userService; 

@Test 
public void test() { 
    final String fName = " xxxxxx ";   

    User user = new User(); 
    user.setFirstName(fName); 
    user.setLastName(fName); 
    user.setEmail(fName); 
    user.setLogin(fName); 
    user.setPhone(fName); 
    userService.create(user); 

    user = userService.getUserByLogin(fName).get(); 
    assertEquals(fName, user.getLogin()); 
} 
} 

Что я могу сделать, чтобы предотвратить UserService работать с реальной БД и как-то просто сделать моделирование?

ответ

1

Лучшим вариантом является использование различных компонентов DataSource в тестах. Ваше приложение будет протестировано против некоторых в БД памяти (обычно H2). Просто создайте эту тестовую конфигурацию где-то в вашем src/test/java/yourRootPackage:

@TestConfiguration 
public class DataSourceConfig { 

    @Bean 
    @Primary 
    public DataSource dataSource() { 
     return new EmbeddedDatabaseBuilder() 
      .generateUniqueName(true) 
      .setType(H2) 
      .build(); 
    } 
} 
+0

Спасибо! Мне также нужно было реализовать JdbcTemplate @Bean и добавить зависимость от H2, но это привело меня к правильному пути, спасибо. – gygabyte