我正在尝试为我的某项服务编写测试。该服务使用自动装配的存储库,该存储库使用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使用真正的数据库并以某种方式进行模拟?
答案 0 :(得分:1)
最佳选择是在测试中使用不同的DataSource bean。您的应用程序将针对内存DB(通常为H2)中的某些进行测试。只需在@TestConfiguration
public class DataSourceConfig {
@Bean
@Primary
public DataSource dataSource() {
return new EmbeddedDatabaseBuilder()
.generateUniqueName(true)
.setType(H2)
.build();
}
}
:
{{1}}