diff options
author | Niek Haarman <haarman.niek@gmail.com> | 2019-09-08 10:51:01 +0200 |
---|---|---|
committer | GitHub <noreply@github.com> | 2019-09-08 10:51:01 +0200 |
commit | dbdef2fd74b86868a953e1ba609d235664148f50 (patch) | |
tree | d49e87b61a71f0e6c1aaa431949ce6f51ab87e02 | |
parent | 442d227adc7b95532f528fb6a4e61a40fc74127f (diff) | |
parent | 8baf2db88dfc1f9e809c2caf5c0615010a2a2345 (diff) | |
download | mockito-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.kt | 23 | ||||
-rw-r--r-- | tests/src/test/kotlin/test/MockingTest.kt | 20 |
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) {} |