【问题标题】:Mockito - when thenReturnMockito - 当 thenReturn
【发布时间】:2017-07-20 18:38:43
【问题描述】:

我是 Mockito 库的新手,无法理解以下语法: 在我定义的测试之前 -

when(CLASS.FUNCTION(PARAMETERS)).thenReturn(RETURN_VALUE)

而实际的测试是——

assertSame(RETURN_VALUE, CLASS.FUNCTION(PARAMETERS))

我不是把第一行代码(when... thenReturn)的函数的返回值设置为RETURN_VALUE吗?如果答案是肯定的,那么assertSame 当然会是真的并且测试会通过,我在这里错过了什么?

【问题讨论】:

  • 你是问这两行代码的区别吗? “CLASS.FUNCTION”是静态方法吗?举一个更现实的例子,澄清你的问题。
  • 请发布minimal reproducible example 以及您的预期结果和实际结果。就目前而言,我不完全确定你在问什么。您收到错误消息吗?我要说的一件事是您可能想查看一些测试/模拟教程。您应该将 when/then 用于您模拟的内容(被测单元的依赖项)。然后你测试执行和验证。

标签: java mocking mockito


【解决方案1】:

Mockito(或任何形式的模拟,实际上)的重点不是模拟您正在检查的代码,而是用模拟代码替换外部依赖项。

例如,假设你有这个简单的界面:

public interface ValueGenerator {
    int getValue();
}

这是你使用它的代码:

public class Incrementor {
    public int increment(ValueGenerator vg) {
        return vg.getValue() + 1;
    }
}

您想测试您的Incrementor 逻辑,而不依赖于ValueGenerator 的任何特定实现。 这就是 Mockito 发挥作用的地方:

// Mock the dependencies:
ValueGenerator vgMock = Mockito.mock(ValueGenerator.class);
when(vgMock.getValue()).thenReturn(7);

// Test your code:
Incrementor inc = new Incrementor();
assertEquals(8, inc.increment(vgMock));

【讨论】:

  • 我一直在寻找这个答案。 +1
  • 我见过很多仅模拟测试的示例。仅测试模拟是非常令人困惑和毫无意义的,对吗?例如,返回 vg.getValue();而不是 return vg.getValue() + 1;据我所知,基本上没有测试任何东西,而且有很多例子可以做到这一点
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-02-23
  • 2017-07-21
  • 1970-01-01
  • 2019-09-30
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多