在 .verify() 之外使用 ArgumentCaptor?

问题描述 投票:0回答:1

我有一个实体,它不用作 .verify() 中的参数,而仅用作该实体的属性。但是,我想捕获该实体,以便稍后使用assertEquals 来验证该实体的另一个属性。如果 .verify() 中根本没有使用该实体,这可能吗?

我发现,只有与 .when() 或 .verify() 一起使用时,我才能捕获参数。但这两者本身都没有意义,因为我直接使用或返回实体作为参数的唯一类是我也想测试的类。所以我对它们使用@Autowired,而不是@MockBean。如果我尝试以某种方式将实体包含在 .verify() 中,它会给出 NullPointerException

ArgumentCaptor<Entity> entityArgumentCaptor = ArgumentCaptor.forClass(Entity.class);

Mockito.verify(reportMock, Mockito.times(1)).doIt(Mockito.eq(entityArgumentCaptor.capture().getIdentifier()), Mockito.eq(null)); //not working
Entity entityArguments = entityArgumentCaptor.getValue();
assertEquals(entityState.completed, entityArguments.getState());
java spring spring-boot junit mockito
1个回答
2
投票

您想要捕获您的实体,然后断言其属性:

ArgumentCaptor<Entity> entityArgumentCaptor
    = ArgumentCaptor.forClass(Entity.class);
Mockito.verify(reportMock)
    .doIt(entityArgumentCaptor.capture(), Mockito.isNull());
Entity entityArguments = entityArgumentCaptor.getValue();
assertEquals(
    entityState.completed,
    entityArguments.getIdentifier().getState());
© www.soinside.com 2019 - 2024. All rights reserved.