2013-04-05 8 views
17

私はmockitoを使用しています。私は、ロックされていないメソッドが呼び出されたときにRuntimeExceptionを投げたいです。 これを行う方法はありますか?Unmockedメソッドを呼び出すとRuntimeExceptionがスローされます

+0

なぜあなたはそれをしたいですか? – Woot4Moo

+0

この文脈では、まったく「ロックされていない方法」とはどういう意味ですか? 'mock(...)'/'@ Mock'を使うと、クラス内のすべてのメソッドがモックされます。 –

+5

私はしばしばいくつかの方法を嘲笑することを忘れるので。例外は、これらのメソッドを見つけるのに役立ちます。 – Hlib

答えて

20

モックのデフォルトの回答を設定できます。スタブされていないすべてのメソッドは、このデフォルトの答えを使用します。モックは、モードをスタブに入る前に、あなたがない使用方法がwhenHow does mockito when() invocation work?)前に呼び出されるので、この機能を持つwhen、それはRuntimeExceptionがスローされますすることができます

public void testUnstubbedException() { 
    // Create a mock with all methods throwing a RuntimeException by default 
    SomeClass someClass = mock(SomeClass .class, new RuntimeExceptionAnswer()); 

    doReturn(1).when(someClass).getId(); // Must use doReturn 

    int id = someClass.getId(); // Will return 1 

    someClass.unstubbedMethod(); // Will throw RuntimeException 
} 

public static class RuntimeExceptionAnswer implements Answer<Object> { 

    public Object answer(InvocationOnMock invocation) throws Throwable { 
     throw new RuntimeException (invocation.getMethod().getName() + " is not stubbed"); 
    } 

} 

注意。

したがって、これを行うにはdoReturnを使用する必要があります。

+2

ありがとう!しかし、(someClass.unmpokedMethod())。thanReturn( "huerga") 'を挿入すると例外がスローされ続ける – Hlib

+4

'when'の代わりに' doReturn'を使う必要があります。私はこの解決策で私の答えを編集しました。 –

+2

ありがとう!これは本当に効果的です! – Hlib

0

クラス全体をモックした結果、すべてのメソッドがnullを返すことになります。

次に、doReturn(...)を使用してその動作を変更できます。同様に、doThrow(...)を使用すると、例外をスローする(voidの呼び出しのみ)メソッドを作成できます。

あなたの質問にお答えしますか?

+1

私は彼がすべてのメソッドが嘲笑されていることを確認したいと思います。たとえば、メソッドが嘲笑されていない場合、Mockitoは例外をスローします。 –

+2

はい!しかし、私は呼び出されるすべてのメソッドが嘲笑されていることを確認したい。 – Hlib

+0

mockedクラスのすべてのメソッドがmockedされています - 定義通りです。 –

12

これを行う最善の方法は、verifyNoMoreInteractionsignoreStubsの静的メソッドです。あなたのテストの「行為」の後にこれらを呼んでください。アンスタブされたメソッドが呼び出されたが検証されていない場合は失敗するでしょう。

verifyNoMoreInteractions(ignoreStubs(myMock)); 

私はそこのコード例は、現在、誤植が含まれていることを信じているが、これはhttps://static.javadoc.io/org.mockito/mockito-core/2.8.47/org/mockito/Mockito.html#ignore_stubs_verificationで記述されています。

+0

+1私はこの解決法が好きです。 –

+4

これは、モックされていないメソッドへの呼び出しによってdereferenceがnullになっているため、テストがこの時点より前に不明瞭にクラッシュした場合には役に立ちません。 –

+0

優れています。なぜこれがドキュメントに隠されているのか不思議です。 –

関連する問題