Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/383.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/spring/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 带有单个自动连线测试bean的DataJpaTest_Java_Spring_Spring Boot_Spring Data Jpa_Spring Test - Fatal编程技术网

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数据库进行配置
我的服务仅依赖于其他服务或存储库。存储库没有依赖关系——想象一下JPA存储库接口

我提出了以下解决方案,效果很好:

@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());
    }

}