CtrlK
BlogDocsLog inGet started
Tessl Logo

tessl/maven-com-nhaarman-mockitokotlin2--mockito-kotlin

Helper functions to work with Mockito in Kotlin

Pending
Quality

Pending

Does it follow best practices?

Impact

Pending

No eval scenarios have been run

SecuritybySnyk

Pending

The risk profile of this skill

Overview
Eval results
Files

Mockito-Kotlin

Mockito-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.

Package Information

  • Package Name: mockito-kotlin
  • Package Type: maven
  • Language: Kotlin
  • Installation: Add to your build.gradle: testImplementation "com.nhaarman.mockitokotlin2:mockito-kotlin:2.2.0"

Core Imports

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.any

Basic Usage

import 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())
}

Architecture

Mockito-Kotlin is organized around several key areas:

  • Mock Creation: Type-safe mock creation with optional immediate stubbing
  • Argument Matching: Kotlin-friendly argument matchers with reified generics
  • Verification: Mockito verification with Kotlin extensions and coroutine support
  • Stubbing: Fluent stubbing API with Kotlin DSL and lambda support
  • Spying: Spy creation with type safety and immediate stubbing options
  • BDD Support: Behavior-driven development style functions

Capabilities

Mock Creation

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
): T

Mock Creation

Argument Matching

Powerful 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): T

Argument Matching

Verification

Comprehensive 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)

Verification

Stubbing

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>
}

Stubbing

Argument Capturing

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
}

Argument Capturing

Spying

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): T

Spying

Stubber Functions

Flexible 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>

BDD Support

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>

Core Utilities

Essential Mockito utility functions for mock management and validation.

fun validateMockitoUsage()
fun <T> reset(vararg mocks: T)
fun mockingDetails(toInspect: Any): MockingDetails

Types

// 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
Workspace
tessl
Visibility
Public
Created
Last updated
Describes
mavenpkg:maven/com.nhaarman.mockitokotlin2/mockito-kotlin@2.2.x
Publish Source
CLI
Badge
tessl/maven-com-nhaarman-mockitokotlin2--mockito-kotlin badge