【问题标题】:Mockito ArgumentCaptor is nullMockito ArgumentCaptor 为空
【发布时间】:2021-02-08 16:01:36
【问题描述】:

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

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

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

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

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

如果我完全迷路了,我很抱歉。提前感谢您的帮助!

【问题讨论】:

    标签: java maven intellij-idea junit mockito


    【解决方案1】:

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

    但您也可以手动初始化 ArgumentCaptor,无需 @Captor 注释:

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

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

    【讨论】:

    • 谢谢伙计。我认为这就是解决方案! :)
    【解决方案2】:

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

    对我来说,使用 @Capture 注释失败,正如你所描述的那样,ArgumentCaptor.forClass(Invoice.class)

    不幸的是,我试图捕获的类有最终的方法,似乎 Mockito 只是返回 null... 我需要重新设计我的测试方式,以避免参加期末考试。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-08-13
      • 1970-01-01
      • 2023-02-15
      • 2013-06-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多