首页 > 解决方案 > 测试 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 角色正确创建的东西对象?

标签: javajunitmockito

解决方案


使用俘虏。

在您的测试中创建带有 @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);

推荐阅读