java - Spring Boot 测试服务(使用带有 JDBCTemplate 的存储库)

标签 java spring testing service spring-boot

我正在尝试为我的一项服务编写测试。该服务使用 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/

相关文章:

java - 从文件加载 jdbc 连接字符串的最佳方法,这样它就不会被硬编码到程序中?

java - 什么是NullPointerException,我该如何解决?

java - Spring Boot + Spring Security 的自定义登录页面

java - 无法将 Java Spring webapp 部署到 Tomcat

testing - TestCafe 适合 BDD 和 cucumber 吗?

c# - 如果我们不通过单元测试验证私有(private)方法是否被调用,我们如何验证它们是否被调用?

spring - 使用 spring 声明式缓存进行集成测试

java - Android操作栏自定义颜色样式

Crud 存储库的 Spring bean 配置

java - 我可以使用什么 Java SDK 返回 IoT 中心中的设备列表