java - 如何使用 Spring Boot 编写集成/系统测试以使用存储库测试服务

标签 java spring spring-boot integration-testing

我在 Spring Boot 应用程序中有 @Service,它正在解析文件,然后使用 Spring Data JPA 将其存储到数据库中。我想用更改此映射的所有逻辑来测试此解析。因此,为此我需要在测试中将映射存储在数据库中。

@Service  
public class ParsingService {
    @Autowired
    private StoringInDBRepository storingInDBRepository;
}

@Repository
public interface StoringInDBRepository extends JpaRepository<MyEntity, String> {

问题是在使用注释@SpringBootTest 进行测试期间,我不想加载整个上下文,而只想加载我的 ParsingService。 当我写作时:

@RunWith(SpringRunner.class)
@SpringBootTest(classes = {ParsingService.class})
public class ParsingServiceTest{

    @Test
    public void someTest(){
    }
}

此测试无法初始化,因为我没有在@SpringBootTest 注释中加载StoringInDBRepository。但是我可以做到,因为 StoringInDBRepository 是一个接口(interface)。只有在我测试存储库层时,根据 javadoc 使用 @DataJpaTest 才是正确的。不推荐使用@DataJpaTest 和@SpringBootTest。

我应该如何测试此类服务? 提前致谢。

最佳答案

因此,经过所有调查后,我找到了几个解决方案。我选择使用

启用存储库和服务
@SpringBootTest(classes = {ParsingService.class})
@EnableJpaRepositories(basePackages = "com.my.repository")
@EntityScan("com.my.entity")
@AutoConfigureDataJpa

这是一个解决方法。而且我认为这不是最好的。另一种解决方案是创建一个 @TestConfiguration ,它将返回您的服务,并且全部使用 @DataJpaTest 注释来启用存储库类。在这种情况下,您应该使用@SpringBootTest 注释

关于java - 如何使用 Spring Boot 编写集成/系统测试以使用存储库测试服务,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50854676/

相关文章:

java - 此应用程序没有明确映射/错误白标错误

java - 如何将解决方案返回定义为 boolean 值?

java - 带参数的Spring编程事务

java - 如何使实体中的列不可读取

spring-boot - 找不到 org/springframework/boot/bind/RelaxedPropertyResolver

java - 如何在 Spring Boot 中启用 HTTP 响应缓存

java - Qt 和 Android Gallery - 使用 QAndroidJniObject 的 MediaStore

java - 将 tess-two 导入 Intellij 中的 Android 项目

java - 两个或多个(哈希)映射的联合

java - Spring 无法将 AOP 与嵌入式数据库脚本一起使用