java - Mockito:调用 stub 方法

标签 java unit-testing mocking mockito

我非常熟悉脚本语言中的模拟。在我使用过的大多数语言中,都有一个模拟框架允许您调用假函数。例如,在 JavaScript 中,您可以使用 sinon并调用callsFake,然后传入一个函数:

var sandbox = sinon.createSandbox();
sandbox.stub(myObject, 'some_method').callsFake(() => {
    //do stuff
});

在 Perl 中,您可以使用 Test::MockModule->mock :

my $mockedModule = Test::MockModule->new('Some::Module');
$mockedModule->mock('someMethod', sub {
    #Do stuff
});

Java 可以做到这一点吗?我在 Java 中能做的最好的事情就是使用 Mockito通过调用 when(mock(MyClass.class).method()).thenReturn("foo"); 来返回固定值。但当调用 MyClass.method() 时,它总是返回 "foo",并且不执行任何其他操作。我想知道是否可以告诉 Mockito 调用一个假方法而不是调用真正的方法。

这在 Mockito 或其他一些 Java 模拟框架中可能吗?

最佳答案

一种选择是创建一个类,该类扩展该类并覆盖您希望在测试中不执行的行为。

另一个选项是这样的:

when(mockedClass.method()).thenAnswer(new Answer() {
    private int count = 0;
    List<String> values = asList("a", "b")
    public Object answer(InvocationOnMock invocation) {
        return values.get(count++)
    }
});

但它可以促进硬阅读和测试中的极端复杂性。

关于java - Mockito:调用 stub 方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51540888/

相关文章:

reactjs - 在 React 中测试 mapbox-gl 时如何修复 'window.URL.createObjectURL is not a function'?

c# - 单元测试时找不到目录

node.js - 模拟 NodeJs 模块的实例

java - Logback - 每个方法使用 appender,而不是类

java - 通过 java jmx 功能调用方法,其中参数是 ArrayList

java - 错误: Unable to publish yor file in pentaho?

java - 如何在 java 中查找字符串中的 EOF?

c# - NSubstitute ReturnsForAnyArgs 返回 null 但不应该

unit-testing - 模拟对象 - 设置方法 - 测试驱动开发

java - 如何模拟测试下方法调用的方法