【问题标题】:Behavior of doReturn-when and when-thenReturn with mocked vs spied objectdoReturn-when 和 when-thenReturn 与 mocked vs spied 对象的行为
【发布时间】:2018-04-23 10:06:41
【问题描述】:

当使用 spied 对象作为测试对象时,如果我们不想在我们正在测试的方法中调用嵌套方法,其中哪一个(doReturn-when 或 when-thenReturn)可以用来模拟那些嵌套的方法? 有没有办法避免调用我们要测试的方法中的真实方法?

【问题讨论】:

  • @JBNizet 感谢您的回复。这是否意味着当我们对间谍对象使用“doReturn-when”时,我们测试的方法中的真实方法永远不会被调用,对吗?因为我没有看到任何地方表明在使用“doReturn-when”时这些方法永远不会被调用。
  • 嗯,这就是使用 doReturn-when 的全部意义所在:用一个假的方法实现替换方法实现,返回你告诉它返回的内容,并监视调用。
  • 好的。以前我认为这两种方法的行为相似,只是语法不同。现在它有点清楚那些是做什么的。谢谢.. :)

标签: unit-testing junit mockito powermockito


【解决方案1】:

实际上,对于这种特定情况,使用 doReturn-when 或 when-thenReturn 方法并不重要,因为考虑到@Spy,您将始终调用真正的方法。

您可以通过模拟它们来避免输入其他方法,但如果您只使用 Mockito 则会出现问题(它没有这种方法,但 PowerMock 有)。特别是我不同意这种方法,因为我们对测试的干扰太大,而且私有流程是整个流程的一部分,但是您可以这样做:

SomeService mock = spy(SomeService.class);

doReturn(1).when(mock, "getNumber", ArgumentMatchers.anyInt());

更多详情,您可以验证PowerMock's official documentation。另外,很高兴知道some basic unit testing concepts (stubs, mocks and so on)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-02-23
    • 2017-07-21
    • 2021-05-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多