Helper functions to work with Mockito in Kotlin
npx @tessl/cli install tessl/maven-com-nhaarman-mockitokotlin2--mockito-kotlin@2.2.0Mockito-Kotlin is a small library that provides helper functions to work with Mockito in Kotlin. It offers Kotlin-friendly APIs, extension functions, and DSL syntax that address Kotlin's null safety and type inference limitations when using the Java-based Mockito framework. The library enables more idiomatic and concise test code in Kotlin projects.
build.gradle: testImplementation "com.nhaarman.mockitokotlin2:mockito-kotlin:2.2.0"import com.nhaarman.mockitokotlin2.*Or selective imports:
import com.nhaarman.mockitokotlin2.mock
import com.nhaarman.mockitokotlin2.verify
import com.nhaarman.mockitokotlin2.whenever
import com.nhaarman.mockitokotlin2.anyimport com.nhaarman.mockitokotlin2.*
@Test
fun doAction_doesSomething() {
// Given - Create mock with immediate stubbing
val mock = mock<MyClass> {
on { getText() } doReturn "text"
}
val classUnderTest = ClassUnderTest(mock)
// When
classUnderTest.doAction()
// Then
verify(mock).doSomething(any())
}Mockito-Kotlin is organized around several key areas:
Type-safe mock creation with extensive configuration options and immediate stubbing support. Essential for setting up test doubles in Kotlin.
inline fun <reified T : Any> mock(
extraInterfaces: Array<out KClass<out Any>>? = null,
name: String? = null,
spiedInstance: Any? = null,
defaultAnswer: Answer<Any>? = null,
serializable: Boolean = false,
serializableMode: SerializableMode? = null,
verboseLogging: Boolean = false,
invocationListeners: Array<InvocationListener>? = null,
stubOnly: Boolean = false,
useConstructor: UseConstructor? = null,
outerInstance: Any? = null,
lenient: Boolean = false
): T
inline fun <reified T : Any> mock(
extraInterfaces: Array<out KClass<out Any>>? = null,
name: String? = null,
spiedInstance: Any? = null,
defaultAnswer: Answer<Any>? = null,
serializable: Boolean = false,
serializableMode: SerializableMode? = null,
verboseLogging: Boolean = false,
invocationListeners: Array<InvocationListener>? = null,
stubOnly: Boolean = false,
useConstructor: UseConstructor? = null,
outerInstance: Any? = null,
lenient: Boolean = false,
stubbing: KStubbing<T>.(T) -> Unit
): TPowerful argument matchers designed for Kotlin's type system, providing type-safe matching with reified generics and null safety.
inline fun <reified T : Any> any(): T
inline fun <reified T : Any> anyOrNull(): T
inline fun <reified T : Any> anyVararg(): T
inline fun <reified T : Any?> anyArray(): Array<T>
inline fun <reified T : Any> argThat(noinline predicate: T.() -> Boolean): T
inline fun <reified T : Any> argThat(matcher: ArgumentMatcher<T>): T
inline fun <reified T : Any> argForWhich(noinline predicate: T.() -> Boolean): T
inline fun <reified T : Any> argWhere(noinline predicate: (T) -> Boolean): T
fun <T> eq(value: T): T
fun <T> same(value: T): T
inline fun <reified T : Any> isA(): T
fun <T : Any> isNull(): T?
fun <T : Any> isNotNull(): T?
fun <T : Any> notNull(): T?
inline fun <reified T : Any> refEq(value: T, vararg excludeFields: String): T
inline fun <reified T : Any> check(noinline predicate: (T) -> Unit): TComprehensive verification system with support for coroutines, custom verification modes, and order-dependent verification.
fun <T> verify(mock: T): T
fun <T> verify(mock: T, mode: VerificationMode): T
fun <T> verifyBlocking(mock: T, f: suspend T.() -> Unit)
fun <T> verifyBlocking(mock: T, mode: VerificationMode, f: suspend T.() -> Unit)
fun <T> verifyNoMoreInteractions(vararg mocks: T)
fun verifyZeroInteractions(vararg mocks: Any)
fun <T> clearInvocations(vararg mocks: T)
fun times(numInvocations: Int): VerificationMode
fun atLeast(numInvocations: Int): VerificationMode
fun atLeastOnce(): VerificationMode
fun atMost(maxNumberOfInvocations: Int): VerificationMode
fun calls(wantedNumberOfInvocations: Int): VerificationMode
fun never(): VerificationMode
fun description(description: String): VerificationMode
fun after(millis: Long): VerificationAfterDelay
fun timeout(millis: Long): VerificationWithTimeout
fun ignoreStubs(vararg mocks: Any): Array<out Any>
fun only(): VerificationMode
fun inOrder(vararg mocks: Any): InOrder
inline fun inOrder(vararg mocks: Any, evaluation: InOrder.() -> Unit)
inline fun <T> T.inOrder(block: InOrderOnType<T>.() -> Any)
inline fun <T> verify(mock: T, block: VerifyScope<T>.() -> Unit)Fluent stubbing API with Kotlin DSL support, lambda-based configuration, and comprehensive response configuration.
inline fun <T> whenever(methodCall: T): OngoingStubbing<T>
infix fun <T> OngoingStubbing<T>.doReturn(t: T): OngoingStubbing<T>
infix fun <T> OngoingStubbing<T>.doThrow(t: Throwable): OngoingStubbing<T>
infix fun <T> OngoingStubbing<T>.doAnswer(answer: (InvocationOnMock) -> T?): OngoingStubbing<T>
class KStubbing<out T>(val mock: T) {
fun <R> on(methodCall: R): OngoingStubbing<R>
inline fun <reified R : Any> onGeneric(noinline methodCall: T.() -> R?): OngoingStubbing<R>
fun <T : Any, R> onBlocking(m: suspend T.() -> R): OngoingStubbing<R>
}Type-safe argument capturing with Kotlin-friendly APIs and support for multiple argument capture patterns.
inline fun <reified T : Any> argumentCaptor(): KArgumentCaptor<T>
inline fun <reified T : Any> capture(captor: ArgumentCaptor<T>): T
class KArgumentCaptor<out T : Any?>(
private val captor: ArgumentCaptor<T>,
private val tClass: KClass<*>
) {
val firstValue: T
val lastValue: T
val allValues: List<T>
fun capture(): T
}Spy creation with type safety and immediate stubbing options for testing real objects with selective method stubbing.
inline fun <reified T : Any> spy(): T
inline fun <reified T : Any> spy(stubbing: KStubbing<T>.(T) -> Unit): T
fun <T> spy(value: T): T
inline fun <reified T> spy(value: T, stubbing: KStubbing<T>.(T) -> Unit): TFlexible stubbing configuration functions for advanced mock behavior setup.
fun <T> doAnswer(answer: (InvocationOnMock) -> T?): Stubber
fun doCallRealMethod(): Stubber
fun doNothing(): Stubber
fun doReturn(value: Any?): Stubber
fun doReturn(toBeReturned: Any?, vararg toBeReturnedNext: Any?): Stubber
fun doThrow(toBeThrown: KClass<out Throwable>): Stubber
fun doThrow(vararg toBeThrown: Throwable): Stubber
fun <T> Stubber.whenever(mock: T): OngoingStubbing<T>Behavior-driven development style functions providing Given-When-Then syntax for more expressive tests.
fun <T> given(methodCall: T): BDDMyOngoingStubbing<T>
fun <T> given(methodCall: () -> T): BDDMyOngoingStubbing<T>
fun <T> then(mock: T): BDDMockito.Then<T>
infix fun <T> BDDMyOngoingStubbing<T>.will(value: Answer<T>): BDDMyOngoingStubbing<T>
infix fun <T> BDDMyOngoingStubbing<T>.willAnswer(value: (InvocationOnMock) -> T?): BDDMyOngoingStubbing<T>
infix fun <T> BDDMyOngoingStubbing<T>.willReturn(value: () -> T): BDDMyOngoingStubbing<T>
infix fun <T> BDDMyOngoingStubbing<T>.willThrow(value: () -> Throwable): BDDMyOngoingStubbing<T>Essential Mockito utility functions for mock management and validation.
fun validateMockitoUsage()
fun <T> reset(vararg mocks: T)
fun mockingDetails(toInspect: Any): MockingDetails// Mockito-Kotlin specific types
class UseConstructor private constructor(val args: Array<Any>) {
companion object {
fun parameterless(): UseConstructor
fun withArguments(vararg arguments: Any): UseConstructor
}
}
class MockitoKotlinException(message: String?, cause: Throwable?) : RuntimeException(message, cause)
class VerifyScope<out T>(val mock: T) {
inline operator fun Int.times(call: T.() -> Unit)
}
class KStubbing<out T>(val mock: T) {
fun <R> on(methodCall: R): OngoingStubbing<R>
fun <R : Any> onGeneric(methodCall: T.() -> R?, c: KClass<R>): OngoingStubbing<R>
inline fun <reified R : Any> onGeneric(noinline methodCall: T.() -> R?): OngoingStubbing<R>
fun <R> on(methodCall: T.() -> R): OngoingStubbing<R>
fun <T : Any, R> onBlocking(m: suspend T.() -> R): OngoingStubbing<R>
}
class KArgumentCaptor<out T : Any?>(
private val captor: ArgumentCaptor<T>,
private val tClass: KClass<*>
) {
val firstValue: T
val secondValue: T
val thirdValue: T
val lastValue: T
val allValues: List<T>
fun capture(): T
}
// Imported Mockito types
typealias Answer<T> = org.mockito.stubbing.Answer<T>
typealias ArgumentCaptor<T> = org.mockito.ArgumentCaptor<T>
typealias ArgumentMatcher<T> = org.mockito.ArgumentMatcher<T>
typealias BDDMyOngoingStubbing<T> = org.mockito.BDDMockito.BDDMyOngoingStubbing<T>
typealias InOrder = org.mockito.InOrder
typealias InvocationListener = org.mockito.listeners.InvocationListener
typealias InvocationOnMock = org.mockito.invocation.InvocationOnMock
typealias MockSettings = org.mockito.MockSettings
typealias MockingDetails = org.mockito.MockingDetails
typealias OngoingStubbing<T> = org.mockito.stubbing.OngoingStubbing<T>
typealias SerializableMode = org.mockito.mock.SerializableMode
typealias Stubber = org.mockito.stubbing.Stubber
typealias VerificationAfterDelay = org.mockito.verification.VerificationAfterDelay
typealias VerificationMode = org.mockito.verification.VerificationMode
typealias VerificationWithTimeout = org.mockito.verification.VerificationWithTimeout