我非常熟悉脚本语言中的模拟。在我使用过的大多数语言中,都有一个模拟框架允许您调用假函数。例如,在 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/