Mockito ArgumentCaptor 为空

Mockito ArgumentCaptor is null

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

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

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

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

有没有办法在没有 @ExtendWith 的情况下使用 ArgumentCaptor?还是这不是我问题的根本原因?

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

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

但您也可以在没有 @Captor 注释的情况下手动初始化 ArgumentCaptor:

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

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

@ExtendWith(MockitoExtension.class) 不需要在 JUnit4 中使用 @Captor。这是 JUnit5 的一项功能,我仍在使用 JUnit4。

对我来说,使用 @Capture 注释和 ArgumentCaptor.forClass(Invoice.class)

都失败了

不幸的是,class 我试图捕获的方法是最终的,而且 Mockito 似乎只是返回 null... 我需要重新设计我的测试方式以避免 class 出现在决赛中。