[英]Mockito: call a stub method
我對腳本語言的模擬非常熟悉。 在我使用的大多數語言中,都有一個模擬框架,允許您調用偽函數。 例如,在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");
返回一個固定值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++)
}
});
但這可能會導致閱讀困難和測試極其復雜。
看一看AdditionalAnswers#answer(...)
,例如:
doAnswer(AdditionalAnswers.answer((a, b) -> a.equals(b))))
.when(mock).execute(anyString(), anyString());
也有delegatesTo
,這可能是有用的。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.