Skip to content

www.rolfje.com

Testing Kotlin extension functions

Posted on 2020-07-01 By rolfje No Comments on Testing Kotlin extension functions

This might seem obvious for many Kotlin programmers but I did not realize that extension functions are also applied to mocks. This means that if you have a class you can not instantiate for some reason, like the constructor is private and in another package, or the class is abstract, you can still test your extension functions by simply mocking it.

Let’s say I have an extension function on the com.sun.java.swing.action.ActionManager which returns “true” when the action manager contains a “save” action. (Yes it is a silly example I know).

/** Returns true if the actionManager has a "save" action */
fun ActionManager.canSave(): Boolean =
    getAction("save") == null

Of course we want to test our extension function, but writing a complete subclass of ActionManager just to test the extension function would be silly. Instead you can simply mock it with mockk:

import io.mockk.coEvery
import io.mockk.mockk
...
@Test
internal fun testCanSaveExtensionFunction() {
    val mockActionManager: ActionManager = mockk()
    coEvery { mockActionManager.getAction("save") } answers { mockk() }
    assertEquals(true, mockActionManager.canSave())
}

This test will not only run your extension function, but you can even verify that the extension function calls the correct functions on the extended class because mockk lets you check invocations.

It seems like a silly little tip, but I liked it so much when I found this out I thought I’d share it with you.

Hope to be more active on the blog again, until then happy coding!

Software Tags:Kotlin

Post navigation

Previous Post: Voor uw eigen veligheid
Next Post: Methode Buijs uitgelegd

Leave a Reply Cancel reply

Your email address will not be published. Required fields are marked *

           

Recent Comments

  • rolfje on Methode Buijs uitgelegd
  • LinkedIn is at Peak Enshittifaction – Will Chatham's Blog on Linked-In not really Opt-in?
  • Hans j on 1N4148 diode as RF switch
  • Roaming Rhonda on DLNA on OSX, done right
  • Frans on How to fix a Krups XN2001 Nespresso machine

Tags

Anonimatron Apple backup design DIY DRM eclipse environment Fun gmail google hacking hamradio Hardware helicopter iphone ipod iTunes Java Keynote maven modelling motorcycle music news opinion oracle osx photo photography programming repair review security Software Steve Jobs T-Mobile technology Time Machine Ubuntu usability Utilities vacation windows Workshop

Categories

  • Apple (105)
  • Divorce (1)
  • Electronics (3)
  • Fun (57)
  • Games (7)
  • Hardware (72)
  • Microsoft (18)
  • Racing (14)
  • Software (134)
  • Uncategorized (65)
  • Workshop (20)

Archives

Copyright © 2025 www.rolfje.com.

Powered by PressBook WordPress theme