首页 > 解决方案 > Mockito ArgumentCaptor 为空

问题描述

我是初学者,请多多包涵。:)

场景:在 IntelliJ / Maven 上使用 Mockito 进行 JUnit 测试。我正在尝试使用 Java 中的 ArgumentCaptor 读取传递的参数。问题是,这个俘虏本身是空的。俘虏似乎根本不起作用。

@Captor
    private ArgumentCaptor<Invoice> cap; 
    ...        
        verify(invoiceDao).insert(cap.capture());

我怀疑问题是,由于其他原因,我不能使用 @ExtendWith(MockitoExtension.class) 。(我在 @BeforeEach 方法中放置了一些存根,它抛出了 UnnecessaryStubbingExceptions。)

有没有办法在没有@ExtendWith 的情况下使用 th ArgumentCaptor?或者这首先不是我问题的原因吗?

如果我完全迷失在这里,我很抱歉。提前感谢您的帮助!

标签: javamavenintellij-ideajunitmockito

解决方案


事实上,@Captor注释仅在您启用 MockitoExtension 时才有效。

但是您也可以手动初始化 ArgumentCaptor 而不使用@Captor注释:

ArgumentCaptor<Xxx> argumentCaptor = ArgumentCaptor.forClass(Xxx.class);

或者,如果您只是需要避免 UnnecessaryStubbingExceptions,您可以@MockitoSettings(strictness = Strictness.LENIENT)在注解上方添加@ExtendWith(MockitoExtension.class),并继续使用@Captor/@Mock。


推荐阅读