commit | f765a318f996801658f1b989f3ade5366bb27eec | [log] [tgz] |
---|---|---|
author | Niek Haarman <haarman.niek@gmail.com> | Wed Jun 01 15:38:44 2016 +0200 |
committer | Niek Haarman <haarman.niek@gmail.com> | Wed Jun 01 15:38:44 2016 +0200 |
tree | 9654c6dbecdaa95981716d3da44818320d539f28 | |
parent | 17dadf9514a2576ffcca4df61f4d074500af1f21 [diff] |
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.
A small library that provides helper functions to work with Mockito in Kotlin.
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" }
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>()
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())
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.
Using higher-order functions, you can write very clear expectations about expected values. For example:
Kotlin:
verify(myClass).setItems(argThat{ size == 2 })
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.