aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorNiek Haarman <haarman.niek@gmail.com>2019-09-08 10:51:01 +0200
committerGitHub <noreply@github.com>2019-09-08 10:51:01 +0200
commitdbdef2fd74b86868a953e1ba609d235664148f50 (patch)
treed49e87b61a71f0e6c1aaa431949ce6f51ab87e02
parent442d227adc7b95532f528fb6a4e61a40fc74127f (diff)
parent8baf2db88dfc1f9e809c2caf5c0615010a2a2345 (diff)
downloadmockito-kotlin-dbdef2fd74b86868a953e1ba609d235664148f50.tar.gz
Merge pull request #353 from nhaarman/lenient
Support lenient in mock and withSettings
-rw-r--r--mockito-kotlin/src/main/kotlin/com/nhaarman/mockitokotlin2/Mocking.kt23
-rw-r--r--tests/src/test/kotlin/test/MockingTest.kt20
2 files changed, 34 insertions, 9 deletions
diff --git a/mockito-kotlin/src/main/kotlin/com/nhaarman/mockitokotlin2/Mocking.kt b/mockito-kotlin/src/main/kotlin/com/nhaarman/mockitokotlin2/Mocking.kt
index afc0773..521575b 100644
--- a/mockito-kotlin/src/main/kotlin/com/nhaarman/mockitokotlin2/Mocking.kt
+++ b/mockito-kotlin/src/main/kotlin/com/nhaarman/mockitokotlin2/Mocking.kt
@@ -48,9 +48,10 @@ import kotlin.reflect.KClass
* @param stubOnly A stub-only mock does not record method invocations, thus saving memory but disallowing verification of invocations.
* @param useConstructor Mockito attempts to use constructor when creating instance of the mock.
* @param outerInstance Makes it possible to mock non-static inner classes in conjunction with [useConstructor].
+ * @param lenient Lenient mocks bypass "strict stubbing" validation.
*/
inline fun <reified T : Any> mock(
- extraInterfaces: Array<KClass<out Any>>? = null,
+ extraInterfaces: Array<out KClass<out Any>>? = null,
name: String? = null,
spiedInstance: Any? = null,
defaultAnswer: Answer<Any>? = null,
@@ -60,7 +61,8 @@ inline fun <reified T : Any> mock(
invocationListeners: Array<InvocationListener>? = null,
stubOnly: Boolean = false,
@Incubating useConstructor: UseConstructor? = null,
- @Incubating outerInstance: Any? = null
+ @Incubating outerInstance: Any? = null,
+ @Incubating lenient: Boolean = false
): T {
return Mockito.mock(
T::class.java,
@@ -75,7 +77,8 @@ inline fun <reified T : Any> mock(
invocationListeners = invocationListeners,
stubOnly = stubOnly,
useConstructor = useConstructor,
- outerInstance = outerInstance
+ outerInstance = outerInstance,
+ lenient = lenient
)
)!!
}
@@ -94,9 +97,10 @@ inline fun <reified T : Any> mock(
* @param stubOnly A stub-only mock does not record method invocations, thus saving memory but disallowing verification of invocations.
* @param useConstructor Mockito attempts to use constructor when creating instance of the mock.
* @param outerInstance Makes it possible to mock non-static inner classes in conjunction with [useConstructor].
+ * @param lenient Lenient mocks bypass "strict stubbing" validation.
*/
inline fun <reified T : Any> mock(
- extraInterfaces: Array<KClass<out Any>>? = null,
+ extraInterfaces: Array<out KClass<out Any>>? = null,
name: String? = null,
spiedInstance: Any? = null,
defaultAnswer: Answer<Any>? = null,
@@ -107,6 +111,7 @@ inline fun <reified T : Any> mock(
stubOnly: Boolean = false,
@Incubating useConstructor: UseConstructor? = null,
@Incubating outerInstance: Any? = null,
+ @Incubating lenient: Boolean = false,
stubbing: KStubbing<T>.(T) -> Unit
): T {
return Mockito.mock(
@@ -122,7 +127,8 @@ inline fun <reified T : Any> mock(
invocationListeners = invocationListeners,
stubOnly = stubOnly,
useConstructor = useConstructor,
- outerInstance = outerInstance
+ outerInstance = outerInstance,
+ lenient = lenient
)
).apply { KStubbing(this).stubbing(this) }!!
}
@@ -142,9 +148,10 @@ inline fun <reified T : Any> mock(
* @param stubOnly A stub-only mock does not record method invocations, thus saving memory but disallowing verification of invocations.
* @param useConstructor Mockito attempts to use constructor when creating instance of the mock.
* @param outerInstance Makes it possible to mock non-static inner classes in conjunction with [useConstructor].
+ * @param lenient Lenient mocks bypass "strict stubbing" validation.
*/
fun withSettings(
- extraInterfaces: Array<KClass<out Any>>? = null,
+ extraInterfaces: Array<out KClass<out Any>>? = null,
name: String? = null,
spiedInstance: Any? = null,
defaultAnswer: Answer<Any>? = null,
@@ -154,7 +161,8 @@ fun withSettings(
invocationListeners: Array<InvocationListener>? = null,
stubOnly: Boolean = false,
@Incubating useConstructor: UseConstructor? = null,
- @Incubating outerInstance: Any? = null
+ @Incubating outerInstance: Any? = null,
+ @Incubating lenient: Boolean = false
): MockSettings = Mockito.withSettings().apply {
extraInterfaces?.let { extraInterfaces(*it.map { it.java }.toTypedArray()) }
name?.let { name(it) }
@@ -167,6 +175,7 @@ fun withSettings(
if (stubOnly) stubOnly()
useConstructor?.let { useConstructor(*it.args) }
outerInstance?.let { outerInstance(it) }
+ if (lenient) lenient()
}
class UseConstructor private constructor(val args: Array<Any>) {
diff --git a/tests/src/test/kotlin/test/MockingTest.kt b/tests/src/test/kotlin/test/MockingTest.kt
index 5a45d1e..0bb19ce 100644
--- a/tests/src/test/kotlin/test/MockingTest.kt
+++ b/tests/src/test/kotlin/test/MockingTest.kt
@@ -3,10 +3,12 @@ package test
import com.nhaarman.expect.expect
import com.nhaarman.expect.expectErrorWithMessage
import com.nhaarman.expect.fail
-import com.nhaarman.mockitokotlin2.*
-import com.nhaarman.mockitokotlin2.UseConstructor.Companion
import com.nhaarman.mockitokotlin2.UseConstructor.Companion.parameterless
import com.nhaarman.mockitokotlin2.UseConstructor.Companion.withArguments
+import com.nhaarman.mockitokotlin2.doReturn
+import com.nhaarman.mockitokotlin2.mock
+import com.nhaarman.mockitokotlin2.verify
+import com.nhaarman.mockitokotlin2.whenever
import org.junit.Test
import org.mockito.Mockito
import org.mockito.exceptions.verification.WantedButNotInvoked
@@ -256,6 +258,20 @@ class MockingTest : TestBase() {
}
@Test
+ fun mockStubbing_withSettingsAPIAndStubbing_name() {
+ /* Given */
+ val mock = mock<Methods>(name = "myName") {
+ on { nullableStringResult() } doReturn "foo"
+ }
+
+ /* When */
+ val result = mock.nullableStringResult()
+
+ /* Then */
+ expect(result).toBe("foo")
+ }
+
+ @Test
fun mockStubbing_withSettingsAPI_defaultAnswer() {
/* Given */
val mock = mock<Methods>(defaultAnswer = Mockito.RETURNS_MOCKS) {}