Programming language: Kotlin
License: GNU General Public License v3.0 or later
Tags: Tests    
Latest version: v1.2.0

Elmyr alternatives and similar libraries

Based on the "Tests" category.
Alternatively, view Elmyr alternatives based on common mentions on social networks and blogs.

Do you think we are missing an alternative of Elmyr or a related project?

Add another 'Tests' Library



Elmyr is a Kotlin library providing tools to generate “random” values, specifically useful for tests

Release Documentation Status

Build Status codecov

license Donate

Being an adept of testing code, I write a lot of tests. One thing I noticed is that in my tests, my fake / test data always look the same. My user names are always “Bob” and “Alice”, aged 42 or 69, with userId 4816152342 or 24601, and eating “spam”, “eggs” and “bacon”.

The problem is, the more test I write, the less I'm confident in my fake values, because they're always the same.

This is where Elmyr kicks in, allowing you to create fake/fuzzy data based on a few constraints, making your test data random, and yet reproducible.



    repositories {
        maven { url "https://jitpack.io" }
    dependencies {

Forging data: the core module

You can create an instance of the Forge class, and from that generate:

  • primitives, with basic constraints
  • Strings matching simple predicates or even Regexes
  • Your own custom data, by implementing the ForgeryFactory interface, then calling the Forge::addFactory method.

ForgeRule for junit4

You can instantiate a ForgeRule instance, which extends the Forge class, add factories to it, and then annotate fields on your test class with @Forgery.

class FooTest {

    val forge = ForgeRule()

    internal lateinit var fakeBar: Bar

    lateinit var fakeFooList: List<Foo>


ForgeExtension for junit5

You can add an extension and configure it. In addition to creating forgeries on fields/properties of your test class, you can inject parameters directly on your test methods.

internal class FooTest {

    internal lateinit var fakeBar: Bar

    lateinit var fakeFooList: List<Foo>

    fun testSomething(@IntForgery i: Int, forge:Forge){
        // …

spek forgeries

You can create a custom Forge instance with spekForge to be able to add reproducibility to Spek tests.

class CalculatorSpek : Spek({

    val forge = spekForge(
        seeds = mapOf(
            "CalculatorSpek/A calculator/addition/returns the sum of its arguments" to 0x1337L

    describe("A calculator") {
        val calculator by memoized { Calculator() }

        describe("addition") {
            it("returns the sum of its arguments") {
                val a = forge.anInt()
                val b = forge.anInt()
                assertEquals(calculator.add(a, b), a + b)


The full documentation will be coming shortly


Contribution is fully welcome. Before submitting a Pull Request, please verify you comply with the following checklist :

  • [x] All public classes, methods and fields must be documented
  • [x] All code must be unit tested (duh…)
  • [x] All code should be usable with and without the Android SDK, from Java and Kotlin

Release History

Latest Release: 1.2.0 (2020/09/03)


  • Allow using the @StringForgery annotation to forge Strings based on Regex
  • Allow setting a size in @StringForgery annotation


  • Allow injecting collections of primitives with @BoolForgery, @IntForgery, @LongForgery, @FloatForgery, @DoubleForgery, as well as @StringForgery and RegexForgery
  • Allow advanced forgery injections using @AdvancedForgery and @MapForgery


  • Allow injecting collections of primitives with @BoolForgery, @IntForgery, @LongForgery, @FloatForgery, @DoubleForgery, as well as @StringForgery and RegexForgery
  • Allow advanced forgery injections using @AdvancedForgery and @MapForgery


This library is completely free to use and modify (as per the [License](LICENSE.md)). I try my best to make it as good as possible, but only do this on my free time. If you want to support my work, you can click the Donate button below.



Xavier F. Gouchet – @xgouchet

Distributed under the MIT license. See [LICENSE.md](LICENSE.md) for more information.


*Note that all licence references and agreements mentioned in the Elmyr README section above are relevant to that project's source code only.