Skip to content
Oleksiy Pylypenko edited this page Mar 8, 2019 · 20 revisions

MockK development wiki

Fresh development setup

  1. git clone git@github.com:mockk/mockk.git
  2. install Android SDK (optional)
  3. Open in IntelliJ IDEA

Main modules

Most of MockK implementation is based on the multi-platform code. Few attempts were made to extend it to JS and Native platforms, but so far only JVM and AIT(Android instrumented test) are supported.

JVM

  • io.mockk:mockk (mockk/jvm)
    JVM MockK implementation
    • io.mockk:mockk-dsl-jvm (dsk/jvm)
      JVM support functions for DSL
    • io.mockk:mockk-common (mockk/common)
      common MockK implementation
      • io.mockk:mockk-dsl (dsl/common)
        common MockK DSL interface
    • io.mockk:mockk-agent-jvm (agennt/jvm)
      call interception for JVM
      • io.mockk:mockk-agent-common (agent/common)
        common call interception code(Android and JVM)
      • io.mockk:mockk-agent-api (agent/common)
        common API(Android and JVM) for call interception
      • org.objenesis:objenesis (2.6)
        library to instantiate objects
      • net.bytebuddy:byte-buddy (1.9.3)
        library to modify byte-code
      • net.bytebuddy:byte-buddy-agent (1.9.3)
        library to modify byte-code on flight

Android instrumented tests

  • io.mockk:mockk-android (mockk/android)
    Android implementation is based on JVM(with JVM agent exclusion)
    • io.mockk:mockk (mockk/jvm)
      JVM MockK implementation
      • io.mockk:mockk-common (mockk/common)
        common MockK implementation
        • io.mockk:mockk-dsl (dsl/common)
          common MockK DSL interface
      • io.mockk:mockk-dsl-jvm (dsl/jvm)
        JVM support functions for DSL
    • io.mockk:mockk-agent-android (agent/android)
      call interception for Android (drop-in replacement for mockk-agent-jvm)
      • io.mockk:mockk-agent-common (agent/common)
        common call interception code(Android and JVM)
      • io.mockk:mockk-agent-api (agent/common)
        common API(Android and JVM) for call interception
      • org.objenesis:objenesis (2.6)
        library to instantiate objects
      • com.linkedin.dexmaker:dexmaker (2.12.1)
        library to modify dex-code

Troubleshooting

Transformation dumping

To see results of class transformation(and untransformation) add following system variable:

java  -Dio.mockk.classdump.path=some-directory ...

After running your code transformed class files should appear in some-directory.

Enabling trace logs

Put logback-test.xml in your resources(test-resources) folder:

<?xml version="1.0" encoding="UTF-8"?>
<configuration>

    <statusListener class="ch.qos.logback.core.status.NopStatusListener"/>

    <appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
        <layout class="ch.qos.logback.classic.PatternLayout">
            <Pattern>
                %d{yyyy-MM-dd HH:mm:ss} [%thread] %-5level %logger{36} - %msg%n
            </Pattern>
        </layout>
    </appender>

    <root level="debug">
        <appender-ref ref="STDOUT"/>
    </root>

</configuration>

Accessing information in IDEA Debugger

Just use the following expression:

((MockKGateway.implementation() as JvmMockKGateway).stubRepo.stubs as JvmWeakConcurrentMap).map

This particular gives access to all stubs, but you may access different other objects from JvmMockKGateway

Topics

  • Basics
  • Code transformation
    • ByteBuddy inlining
    • ByteBuddy subclassing
    • DEX Maker inlining
    • DEX Maker subclassing
  • Call recording
    • Recording states
    • Signatures
    • Autohinting
    • Chain detection
  • Verification
    • verify
    • verifyAll
    • verifyOrder
    • verifySequence
    • verify(timeout=X)
Clone this wiki locally