簡體   English   中英

Mockito:調用存根方法

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM