私はmockitoを使用しています。私は、ロックされていないメソッドが呼び出されたときにRuntimeException
を投げたいです。 これを行う方法はありますか?Unmockedメソッドを呼び出すとRuntimeExceptionがスローされます
答えて
モックのデフォルトの回答を設定できます。スタブされていないすべてのメソッドは、このデフォルトの答えを使用します。モックは、モードをスタブに入る前に、あなたがない使用方法がwhen
(How 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
を使用する必要があります。
クラス全体をモックした結果、すべてのメソッドがnullを返すことになります。
次に、doReturn(...)
を使用してその動作を変更できます。同様に、doThrow(...)
を使用すると、例外をスローする(void
の呼び出しのみ)メソッドを作成できます。
あなたの質問にお答えしますか?
私は彼がすべてのメソッドが嘲笑されていることを確認したいと思います。たとえば、メソッドが嘲笑されていない場合、Mockitoは例外をスローします。 –
はい!しかし、私は呼び出されるすべてのメソッドが嘲笑されていることを確認したい。 – Hlib
mockedクラスのすべてのメソッドがmockedされています - 定義通りです。 –
これを行う最善の方法は、verifyNoMoreInteractions
とignoreStubs
の静的メソッドです。あなたのテストの「行為」の後にこれらを呼んでください。アンスタブされたメソッドが呼び出されたが検証されていない場合は失敗するでしょう。
verifyNoMoreInteractions(ignoreStubs(myMock));
私はそこのコード例は、現在、誤植が含まれていることを信じているが、これはhttps://static.javadoc.io/org.mockito/mockito-core/2.8.47/org/mockito/Mockito.html#ignore_stubs_verificationで記述されています。
+1私はこの解決法が好きです。 –
これは、モックされていないメソッドへの呼び出しによってdereferenceがnullになっているため、テストがこの時点より前に不明瞭にクラッシュした場合には役に立ちません。 –
優れています。なぜこれがドキュメントに隠されているのか不思議です。 –
- 1. Clojure:スクリプトから関数を呼び出すと、RuntimeExceptionがスローされます。
- 2. @classmethodデコレートされたメソッドを呼び出すと、TypeErrorがスローされます
- 3. インスタンスを介してメソッドを呼び出すとstackOverFlowエラーがスローされます
- 4. 廃止されたFacebookSdkメソッドがRuntimeExceptionをスローします
- 5. Iは、エラーがスローさaddBorrowerメソッドを呼び出すとエラー
- 6. メソッドが呼び出された行に例外がスローされます
- 7. ストアドプロシージャ(MySQL)を呼び出すと例外がスローされます
- 8. cp_rpメソッドを呼び出すときにTrueZip例外がスローされる
- 9. null参照私のsendmail()メソッドを呼び出すと例外がスローされる
- 10. onStop()を呼び出すとMediaPlayerがスローされる
- 11. XmlReader :: ReadStartElementを呼び出すときにInvalidOperationExceptionがスローされる
- 12. アプリケーションがバックグラウンドから呼び出されたときにメソッドを呼び出す
- 13. 渡されたオブジェクトのメソッドが呼び出されたときにNULLポインタ例外がスローされました
- 14. 同じインスタンスの2つのメソッドを呼び出すと、WCFのDisposeメソッドが呼び出されます
- 15. Javaメソッドが呼び出される前に例外をスローする方法
- 16. PHPunitメソッドが1回呼び出されると予想され、実際に0回呼び出されます
- 17. C#からpythonスクリプトを呼び出すとエラーがスローされずに呼び出されない
- 18. EasyMock 3.0 Mockedクラスは、メソッドが呼び出されると例外をスローする必要があります。
- 19. リフレクションを使用してインスタンスメソッドを呼び出すと、TargetExceptionがスローされます。
- 20. "onResume"から "showDialog"を呼び出すとランタイム例外がスローされます
- 21. Spring @ Transactionransactional抽象スーパークラスメソッドを呼び出すと、org.hibernate.HibernateExceptionがスローされます。
- 22. C#からストアドプロシージャを呼び出すと、例外がスローされます
- 23. Iteratorでnext()を2回呼び出すとNoSuchElementExceptionがスローされます
- 24. JavaFX電卓RPN - メソッド呼び出し後のRuntimeException
- 25. Spring Kafka -Consumerが呼び出さないメソッドを呼び出す
- 26. どのオーバーロードされたメソッドが呼び出されますか?
- 27. getter内部で非同期メソッドを呼び出すと例外がスローされます
- 28. オーバーライドされたメソッドを呼び出すと、オーバーライドされた呼び出しメソッドのスーパークラス
- 29. Ios:Delegeteメソッドが呼び出されない
- 30. UICollectionViewLayoutメソッドが呼び出されない
なぜあなたはそれをしたいですか? – Woot4Moo
この文脈では、まったく「ロックされていない方法」とはどういう意味ですか? 'mock(...)'/'@ Mock'を使うと、クラス内のすべてのメソッドがモックされます。 –
私はしばしばいくつかの方法を嘲笑することを忘れるので。例外は、これらのメソッドを見つけるのに役立ちます。 – Hlib