我正在尝试为我的一项服务编写测试。该服务使用 Autowiring 的存储库,该存储库使用 jdbcTemplate 来访问数据库。问题是测试实际上将数据放在真实的DB中。
这是我的测试类:
@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 使用真实数据库并以某种方式进行模拟吗?
最佳答案
最好的选择是在测试中使用不同的 DataSource bean。您的应用程序将针对内存中的某些数据库(通常是 H2)进行测试。只需在 src/test/java/yourRootPackage
中的某处创建此测试配置:
@TestConfiguration
public class DataSourceConfig {
@Bean
@Primary
public DataSource dataSource() {
return new EmbeddedDatabaseBuilder()
.generateUniqueName(true)
.setType(H2)
.build();
}
}
关于java - Spring Boot 测试服务(使用带有 JDBCTemplate 的存储库),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42138384/