java - 当我从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)));
}
}
解决方案
我想问题是你SubsequenceService
自己实例化你的。
SubsequenceService subsequenceService = new SubsequenceService();
这样Spring就没有机会进行依赖注入。注入SubsequenceService
自身可以解决问题。
@Autowired
private SubsequenceService subsequenceService
编辑
...现在即使服务不工作,也是空的
我懂了!这应该是因为@DataJpaTest
and@WebMvcTest
注释。这些注释是测试切片,可减少加载到ApplicationContext
. 基本上你说你只想加载与 web 层和持久层相关的 bean。这不包括所有用简单的@Service
. 通过删除测试类上的这两个注释,项目中的所有 bean 都应该加载到ApplicationContext
.
推荐阅读
- javascript - 将数据从 Node.JS 传递到前端 (EJS) 异步而不通过初始渲染传递数据?
- javascript - 使用javascript选中复选框时如何启用提交按钮?
- javascript - 如何在 gremlin-javascript 中获取对象列表而不是地图列表
- sharepoint - 尝试在 SharePoint Online 中包装提升的磁贴时未保存代码
- flutter - 颤振测试文件重要吗?
- c++ - 如何解决文件系统 inlcude 的 CLion 问题?
- sql - 将具有不同 where 子句的两个查询连接到 1 个表中
- javascript - 使用 javascript 从 m3u8 流中获取音频数据以发送到客户端浏览器中的字幕
- matlab - 为什么当我手动输入像素值时 MATLAB 的 norm 函数起作用,但在用于访问图像中的像素值时不起作用,如下所示?
- javascript - Vue Draggable - 有没有办法在列表底部设置占位符放置区/位置?