【问题标题】:SpringBoot test service (using repository with JDBCTemplate)Spring Boot 测试服务(使用带有 JDBCTemplate 的存储库)
【发布时间】:2017-02-09 13:45:24
【问题描述】:

我正在尝试为我的一项服务编写测试。该服务使用自动装配的存储库,该存储库使用 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 使用真实数据库并以某种方式进行模拟吗?

【问题讨论】:

    标签: java spring testing service spring-boot


    【解决方案1】:

    最好的选择是在测试中使用不同的 DataSource bean。您的应用程序将针对一些内存数据库(通常是 H2)进行测试。只需在 src/test/java/yourRootPackage 的某处创建此测试配置:

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

    【讨论】:

    • 谢谢!我还需要实现一个 JdbcTemplate @Bean 并添加 H2 依赖项,但是,这让我找到了正确的方法,谢谢。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-06-26
    • 2018-12-22
    • 2018-11-24
    • 2019-03-20
    • 2019-05-29
    相关资源
    最近更新 更多