Java 带有单个自动连线测试bean的DataJpaTest
我想创建一个测试,它只针对我的项目中的一个服务类(Java 带有单个自动连线测试bean的DataJpaTest,java,spring,spring-boot,spring-data-jpa,spring-test,Java,Spring,Spring Boot,Spring Data Jpa,Spring Test,我想创建一个测试,它只针对我的项目中的一个服务类(@service) 我的服务类有两种依赖关系: 其他服务,我想用@MockBean 我不想嘲笑JPA存储库;我希望它们是真正的Springbean,针对H2数据库进行配置 我的服务仅依赖于其他服务或存储库。存储库没有依赖关系——想象一下JPA存储库接口 我提出了以下解决方案,效果很好: @DataJpaTest class FooServiceTests { @Autowired private FooRepository
@service
)
我的服务类有两种依赖关系:
- 其他服务,我想用
@MockBean
- 我不想嘲笑JPA存储库;我希望它们是真正的Springbean,针对H2数据库进行配置
@DataJpaTest
class FooServiceTests {
@Autowired
private FooRepository fooRepository;
@MockBean
private BarService barService;
@Test
void testService() {
FooService fooService = new FooService(barService, fooRepository);
Assertions.assertNotNull(barService);
Assertions.assertNotNull(fooRepository);
}
}
我的问题是,这个解决方案是否有替代方案,它不需要手动组装被测试的bean。通过使用模拟服务和真实(H2)存储库,Spring可以为我组装bean。一种解决方案,它允许被测试bean将依赖项@自动连接到私有字段中。类似这样的情况:(这显然不起作用):
我想避免使用@SpringBootTest
。如果有答案表明是这样,那么它应该解释为什么这是最好的方法。这显然不起作用-@ygor一般来说,您期望的示例看起来是正确的,除了类注释上的@RunWith(SpringRunner.class
),并且不确定上下文配置的用法是否正确(类-等待@Configuration
准备就绪)。您现在面临的错误是什么?
@DataJpaTest
@ContextConfiguration(classes = FooService.class)
class FooService2Tests {
@MockBean
private BarService barService;
@Autowired
private FooService fooService;
@Test
void testService() {
Assertions.assertNotNull(fooService);
Assertions.assertNotNull(barService);
Assertions.assertNotNull(fooService.getBarService());
Assertions.assertNotNull(fooService.getFooRepository());
}
}