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

Boh*_*huk 3 java spring integration-testing spring-boot

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

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

@Repository
public interface StoringInDBRepository extends JpaRepository<MyEntity, String> {
Run Code Online (Sandbox Code Playgroud)

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

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

    @Test
    public void someTest(){
    }
}
Run Code Online (Sandbox Code Playgroud)

该测试无法初始化,因为我没有在 @SpringBootTest 注释中加载 StorageInDBRepository 。不过我可以做到,因为 StorageInDBRepository 是一个接口。仅当我测试存储库层时,根据 javadoc 使用 @DataJpaTest 才是正确的。不建议使用@DataJpaTest和@SpringBootTest。

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

Boh*_*huk 5

因此,经过所有调查后,我找到了几个解决方案。我选择启用存储库和服务

@SpringBootTest(classes = {ParsingService.class})
@EnableJpaRepositories(basePackages = "com.my.repository")
@EntityScan("com.my.entity")
@AutoConfigureDataJpa
Run Code Online (Sandbox Code Playgroud)

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