summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
author Mark Renouf <mrenouf@google.com> 2023-11-02 22:46:14 +0000
committer Android (Google) Code Review <android-gerrit@google.com> 2023-11-02 22:46:14 +0000
commitff782b33b49466a2816cbf73abbe05a69483eec1 (patch)
treeff90370d5414f9f3b8347cd6dbdb5cb7824f1431
parent505d41c41d1520f3e84f2cc13e53343d88e9f692 (diff)
parent51200c52fd69c4364781a53d4a54298c1d697100 (diff)
Merge "Adds a MockSettings default arg and a throwing default Answer" into main
-rw-r--r--java/tests/src/com/android/intentresolver/MockitoKotlinHelpers.kt36
1 files changed, 32 insertions, 4 deletions
diff --git a/java/tests/src/com/android/intentresolver/MockitoKotlinHelpers.kt b/java/tests/src/com/android/intentresolver/MockitoKotlinHelpers.kt
index aaa7a282..db9fbd93 100644
--- a/java/tests/src/com/android/intentresolver/MockitoKotlinHelpers.kt
+++ b/java/tests/src/com/android/intentresolver/MockitoKotlinHelpers.kt
@@ -23,12 +23,14 @@ package com.android.intentresolver
* causes Kotlin to skip the null checks.
* Cloned from frameworks/base/packages/SystemUI/tests/utils/src/com/android/systemui/util/mockito/KotlinMockitoHelpers.kt
*/
-
import org.mockito.ArgumentCaptor
import org.mockito.ArgumentMatcher
import org.mockito.ArgumentMatchers
+import org.mockito.MockSettings
import org.mockito.Mockito
+import org.mockito.stubbing.Answer
import org.mockito.stubbing.OngoingStubbing
+import org.mockito.stubbing.Stubber
/**
* Returns Mockito.eq() as nullable type to avoid java.lang.IllegalStateException when
@@ -83,8 +85,10 @@ inline fun <reified T : Any> argumentCaptor(): ArgumentCaptor<T> =
*
* @param apply builder function to simplify stub configuration by improving type inference.
*/
-inline fun <reified T : Any> mock(apply: T.() -> Unit = {}): T = Mockito.mock(T::class.java)
- .apply(apply)
+inline fun <reified T : Any> mock(
+ mockSettings: MockSettings = Mockito.withSettings(),
+ apply: T.() -> Unit = {}
+): T = Mockito.mock(T::class.java, mockSettings).apply(apply)
/**
* Helper function for stubbing methods without the need to use backticks.
@@ -94,6 +98,11 @@ inline fun <reified T : Any> mock(apply: T.() -> Unit = {}): T = Mockito.mock(T:
fun <T> whenever(methodCall: T): OngoingStubbing<T> = Mockito.`when`(methodCall)
/**
+ * Helper function for stubbing methods without the need to use backticks.
+ */
+fun <T> Stubber.whenever(mock: T): T = `when`(mock)
+
+/**
* A kotlin implemented wrapper of [ArgumentCaptor] which prevents the following exception when
* kotlin tests are mocking kotlin objects and the methods take non-null parameters:
*
@@ -144,6 +153,25 @@ inline fun <reified T : Any> withArgCaptor(block: KotlinArgumentCaptor<T>.() ->
* val capturedList = captureMany<Foo> { verify(...).someMethod(capture()) }
*/
inline fun <reified T : Any> captureMany(block: KotlinArgumentCaptor<T>.() -> Unit): List<T> =
- kotlinArgumentCaptor<T>().apply{ block() }.allValues
+ kotlinArgumentCaptor<T>().apply { block() }.allValues
inline fun <reified T> anyOrNull() = ArgumentMatchers.argThat(ArgumentMatcher<T?> { true })
+
+/**
+ * Intended as a default Answer for a mock to prevent dependence on defaults.
+ *
+ * Use as:
+ * ```
+ * val context = mock<Context>(withSettings()
+ * .defaultAnswer(THROWS_EXCEPTION))
+ * ```
+ *
+ * To avoid triggering the exception during stubbing, must ONLY use one of the doXXX() methods, such
+ * as:
+ * * [doAnswer][Mockito.doAnswer]
+ * * [doCallRealMethod][Mockito.doCallRealMethod]
+ * * [doNothing][Mockito.doNothing]
+ * * [doReturn][Mockito.doReturn]
+ * * [doThrow][Mockito.doThrow]
+ */
+val THROWS_EXCEPTION = Answer { error("Unstubbed behavior was accessed.") }