java - 测试 void 方法行为 junit 和 mockito
问题描述
鉴于此服务,我想测试 stuff 对象的角色属性是否已正确设置:
public void saveAStuffForAnEvent(Event whatever) {
if (whatever == null){
Stuff stuff = StuffBuilder().role(StuffRoles.DEFAULT).build();
stuffRepository.save(stuff);
} else {
Stuff stuff = StuffBuilder().role(StuffRoles.OTHER).build();
stuffRepository.save(stuff);
}
}
如何测试使用 DEFAULT 角色正确创建的东西对象?
解决方案
使用俘虏。
在您的测试中创建带有 @Captor 注释的字段,例如:
@Mock
private StuffRepository stuffRepository;
@Captor
private ArgumentCaptor<Stuff> stuffCaptor;
然后在测试之后:
// when
subject.saveAStuffForAnEvent(event);
// then
verify(stuffRepository).save(stuffCaptor.capture());
assertThat(stuffCaptor.getValue().getRole()).isEqualTo(StuffRoles.DEFAULT);
或者如果它是集成测试,那么:
// when
subject.saveAStuffForAnEvent(event);
//then
assertThat(subject.findAll().get(0).getRole()).isEqualTo(StuffRoles.DEFAULT);
推荐阅读
- r - 使用“-”作为文本的功能
- c - 当 fork() 返回值存储在全局变量中时
- git - 如何将 git "--unshallow" 与 "--single-branch" 克隆一起使用?
- bootstrap-vue - bootstrap-vue 中用于在不同行上输入标签的布局
- c# - 函数应用通过 Graph API 向 Teams 频道发布消息 - 未经授权
- javascript - 如何摆脱错误“在 dandelion_pro@1.4.0 启动脚本失败。”?
- java - 我可以处理 Reader 初始化中产生的面向块的步骤错误吗?
- typescript - 有没有办法在打字稿中显示一个类型的规范化版本?
- c# - 如何从另一个函数调用函数?
- javascript - 如何生成 CRUD 数据网格接口?