首页 > 解决方案 > 当我从junit调用它时,存储库为空

问题描述

我正在尝试创建junit,并且正在尝试调用在himm 内部调用存储库的服务。这个存储库是空的。我首先搜索并发现我需要包含此注释

@DataJpaTest 
@RunWith(SpringRunner.class) 
@SpringBootTest(classes = CommonSubsequenceApplication.class).

但这给我带来了另一个错误:找到了测试类的@Bootsrap 的多个声明。如果我删除@DataJpaTest我没有这个错误,我会得到一个在有任何这个注释之前我有的错误..存储库为空。

    @DataJpaTest 
    @RunWith(SpringRunner.class) 
    @WebMvcTest(value = SubsequenceController.class)
    @SpringBootTest(classes = CommonSubsequenceApplication.class)
    class SubsequenceServiceTest {
        
        SubsequenceService subsequenceService = new SubsequenceService();
    
    
        @Test
        public void addSubsequenceTest8() throws Exception {
            assertEquals("Success", subsequenceService.addSubsequence("xenis",new Subsequence( 2l,"Xenis", "Learn to dance", "No subsequences", new Date(), 0)));
        }

}

标签: javajunit

解决方案


我想问题是你SubsequenceService自己实例化你的。

SubsequenceService subsequenceService = new SubsequenceService();

这样Spring就没有机会进行依赖注入。注入SubsequenceService自身可以解决问题。

@Autowired
private SubsequenceService subsequenceService

编辑

...现在即使服务不工作,也是空的

我懂了!这应该是因为@DataJpaTestand@WebMvcTest注释。这些注释是测试切片,可减少加载到ApplicationContext. 基本上你说你只想加载与 web 层和持久层相关的 bean。这不包括所有用简单的@Service. 通过删除测试类上的这两个注释,项目中的所有 bean 都应该加载到ApplicationContext.


推荐阅读