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。
我应该如何测试此类服务?提前致谢。
因此,经过所有调查后,我找到了几个解决方案。我选择启用存储库和服务
@SpringBootTest(classes = {ParsingService.class})
@EnableJpaRepositories(basePackages = "com.my.repository")
@EntityScan("com.my.entity")
@AutoConfigureDataJpa
Run Code Online (Sandbox Code Playgroud)
这是一个解决方法。而且我不认为这是最好的。另一个解决方案是创建一个 @TestConfiguration ,它将返回您的服务并全部使用 @DataJpaTest 注释来启用存储库类。在这种情况下,您应该使用@SpringBootTest注释
| 归档时间: |
|
| 查看次数: |
3052 次 |
| 最近记录: |