Use instance creators only from single test file.

This ensures that ordering of tests does not influence
the initialization of the instance creators, assuming
this is done in the setup phase of the test.
2 files changed
tree: 9654c6dbecdaa95981716d3da44818320d539f28
  1. .github/
  2. gradle/
  3. mockito-kotlin/
  4. .gitignore
  5. .travis.yml
  6. build.gradle
  7. gradle.properties
  8. gradlew
  9. gradlew.bat
  10. LICENSE
  11. README.md
  12. settings.gradle
README.md

Mockito-Kotlin

Download

A small library that provides helper functions to work with Mockito in Kotlin.

Install

Mockito-Kotlin is available on JCenter. For Gradle users, add the following to your build.gradle:

repositories {
    jcenter()
}
dependencies {
    testCompile "com.nhaarman:mockito-kotlin:x.x.x"
}

Examples

Creating mock instances

Due to Kotlin‘s reified type parameters, if the type can be inferred, you don’t have to specify it explicitly:

Java:

MyClass c = mock(Myclass.class);
c.doSomething(mock(MyOtherClass.class));

Kotlin:

val c : MyClass = mock()
c.doSomething(mock())

If the type can't be inferred, you can pass it like so:

val d = mock<MyClass>()

Expecting any value

Mockito‘s any(Class<T>) often returns null for non-primitive classes. In Kotlin, this can be a problem due to its null-safety feature. This library creates non-null instances when necessary. Again, if the type can be inferred, you don’t have to specify it explicitely:

Java:

verify(myClass).doSomething(any(String.class));

Kotlin:

verify(myClass).doSomething(any()); // Non-nullable parameter type is inferred

For generic arrays, use the anyArray() method:

verify(myClass).setItems(anyArray())

Custom instance creators

There are some cases where Mockito-Kotlin cannot create an instance of a class. This can for instance be when a constructor has some specific preconditions for its parameters. You can register instance creators to overcome this:

MockitoKotlin.registerInstanceCreator<MyClass> { MyClass(5) }

Whenever MockitoKotlin needs to create an instance of MyClass, this function is called, giving you ultimate control over how these instances are created.

These instance creators work on a per-file basis: for each of your test files you will need to register them again.

Argument Matchers

Using higher-order functions, you can write very clear expectations about expected values. For example:

Kotlin:

verify(myClass).setItems(argThat{ size == 2 })

Convenience functions

Most of Mockito‘s static functions are available as top-level functions. That means, IDE’s like IntelliJ can easily import and autocomplete them, saving you the hassle of manually importing them.