Skip to content

Commit d07a2c9

Browse files
authored
Merge pull request #59 from nhaarman/release-0.6.0
Release 0.6.0
2 parents a6f8604 + 2a2ed98 commit d07a2c9

File tree

4 files changed

+70
-4
lines changed

4 files changed

+70
-4
lines changed

mockito-kotlin/build.gradle

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,7 @@ repositories {
2020
dependencies {
2121
compile "org.jetbrains.kotlin:kotlin-stdlib:$kotlin_version"
2222
compile "org.jetbrains.kotlin:kotlin-reflect:$kotlin_version"
23-
compile "org.mockito:mockito-core:2.0.52-beta"
23+
compile "org.mockito:mockito-core:2.0.99-beta"
2424

2525
/* Tests */
2626
testCompile "junit:junit:4.12"

mockito-kotlin/src/main/kotlin/com/nhaarman/mockito_kotlin/CreateInstance.kt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -177,7 +177,7 @@ private fun <T : Any> KType.createNullableInstance(): T? {
177177
private fun <T> Class<T>.uncheckedMock(): T {
178178
val impl = MockSettingsImpl<T>().defaultAnswer(Answers.RETURNS_DEFAULTS) as MockSettingsImpl<T>
179179
val creationSettings = impl.confirm(this)
180-
return MockUtil().createMock(creationSettings).apply {
180+
return MockUtil.createMock(creationSettings).apply {
181181
(this as MockMethodInterceptor.MockAccess).mockitoInterceptor = null
182182
}
183183
}

mockito-kotlin/src/main/kotlin/com/nhaarman/mockito_kotlin/Mockito.kt

Lines changed: 12 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -31,7 +31,6 @@ import org.mockito.MockingDetails
3131
import org.mockito.Mockito
3232
import org.mockito.invocation.InvocationOnMock
3333
import org.mockito.stubbing.Answer
34-
import org.mockito.stubbing.DeprecatedOngoingStubbing
3534
import org.mockito.stubbing.OngoingStubbing
3635
import org.mockito.stubbing.Stubber
3736
import org.mockito.verification.VerificationMode
@@ -80,6 +79,18 @@ inline fun <reified T : Any> mock(defaultAnswer: Answer<Any>): T = Mockito.mock(
8079
inline fun <reified T : Any> mock(s: MockSettings): T = Mockito.mock(T::class.java, s)!!
8180
inline fun <reified T : Any> mock(s: String): T = Mockito.mock(T::class.java, s)!!
8281

82+
inline fun <reified T : Any> mock(stubbing: KStubbing<T>.() -> Unit): T
83+
= Mockito.mock(T::class.java)!!.apply { stubbing(KStubbing(this)) }
84+
85+
class KStubbing<out T>(private val mock: T) {
86+
fun <R> on(methodCall: R) = Mockito.`when`(methodCall)
87+
fun <R> on(methodCall: T.() -> R) = Mockito.`when`(mock.methodCall())
88+
}
89+
90+
infix fun <T> OngoingStubbing<T>.doReturn(t: T): OngoingStubbing<T> = thenReturn(t)
91+
fun <T> OngoingStubbing<T>.doReturn(t: T, vararg ts: T): OngoingStubbing<T> = thenReturn(t, *ts)
92+
inline infix fun <reified T> OngoingStubbing<T>.doReturn(ts: List<T>): OngoingStubbing<T> = thenReturn(ts[0], *ts.drop(1).toTypedArray())
93+
8394
fun mockingDetails(toInspect: Any): MockingDetails = Mockito.mockingDetails(toInspect)!!
8495
fun never(): VerificationMode = Mockito.never()!!
8596
inline fun <reified T : Any> notNull(): T? = Mockito.notNull(T::class.java)
@@ -93,7 +104,6 @@ fun <T> same(value: T): T? = Mockito.same(value)
93104
inline fun <reified T : Any> spy(): T = Mockito.spy(T::class.java)!!
94105
fun <T> spy(value: T): T = Mockito.spy(value)!!
95106

96-
fun <T> stub(methodCall: T): DeprecatedOngoingStubbing<T> = Mockito.stub(methodCall)!!
97107
fun timeout(millis: Long): VerificationWithTimeout = Mockito.timeout(millis)!!
98108
fun times(numInvocations: Int): VerificationMode = Mockito.times(numInvocations)!!
99109
fun validateMockitoUsage() = Mockito.validateMockitoUsage()

mockito-kotlin/src/test/kotlin/MockitoTest.kt

Lines changed: 56 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -282,4 +282,60 @@ class MockitoTest {
282282
mock.go()
283283
}
284284
}
285+
286+
@Test
287+
fun testMockStubbing_lambda() {
288+
/* Given */
289+
val mock = mock<Open>() {
290+
on { stringResult() } doReturn "A"
291+
}
292+
293+
/* When */
294+
val result = mock.stringResult()
295+
296+
/* Then */
297+
expect(result).toBe("A")
298+
}
299+
300+
@Test
301+
fun testMockStubbing_normalOverridesLambda() {
302+
/* Given */
303+
val mock = mock<Open>() {
304+
on { stringResult() }.doReturn("A")
305+
}
306+
whenever(mock.stringResult()).thenReturn("B")
307+
308+
/* When */
309+
val result = mock.stringResult()
310+
311+
/* Then */
312+
expect(result).toBe("B")
313+
}
314+
315+
@Test
316+
fun testMockStubbing_methodCall() {
317+
/* Given */
318+
val mock = mock<Open>()
319+
mock<Open> {
320+
on(mock.stringResult()).doReturn("A")
321+
}
322+
323+
/* When */
324+
val result = mock.stringResult()
325+
326+
/* Then */
327+
expect(result).toBe("A")
328+
}
329+
330+
@Test
331+
fun doReturn_withSingleItemList() {
332+
/* Given */
333+
val mock = mock<Open> {
334+
on { stringResult() } doReturn listOf("a", "b")
335+
}
336+
337+
/* Then */
338+
expect(mock.stringResult()).toBe("a")
339+
expect(mock.stringResult()).toBe("b")
340+
}
285341
}

0 commit comments

Comments
 (0)