Some Nitty and Some Gritty

Satisfaketion is broken into three main library modules

  • Core

  • Generators

  • Mutators

Core

The engine that powers Satisfaketion. Instantiating a satisfaketion object is as easy as declaring the helper function.

Once a Faker has been instantiated, type-safe generators can be associated with each member of the class.

Faker

val satisfaketion = Faker<SimpleDataClass> {
SimpleDataClass::a { TestPhoneGenerator }
SimpleDataClass::b { SmolIntGenerator }
}

val example = faker.generate()

Generator

A Generator is a functional interface that declares a single method generate

fun interface Generator<R> {
fun generate(seed: Random): R
}

An example generator for a naive phone number could be

object TestPhoneGenerator : Generator<String> {
override fun generate(seed: Random = Random.Default): String {
val first = seed.nextInt(100..999)
val second = seed.nextInt(100..999)
val third = seed.nextInt(1000..9999)
return "$first-$second-$third"
}
}

Mutator

A Mutator is another functional interface

fun interface Mutator<R, RR> {
fun mutate(generator: Generator<R>): Generator<RR>
}

Mutators allow you to take an existing Generator and mutate it, allowing for expansive reuse of base generators.

Let's say you have a data class MyPerson

data class MyPerson(
val firstName: String,
val lastName: String,
val prefix: String?,
val suffix: String?,
)

using the existing EnglishName generators (from the generator module), you can declare a satisfaketion instance, with mutators to add weighted mutability to the prefix and suffix fields

val satisfaketion = satisfaketion {
register(MyPerson::class) {
MyPerson::firstName { EnglishName.firstName }
MyPerson::lastName { EnglishName.lastName }
MyPerson::prefix { EnglishName.prefix.mutate(WeightedNullabilityMutator(0.25, seed)) }
MyPerson::suffix { EnglishName.suffix.mutate(WeightedNullabilityMutator(0.25, seed)) }
}
}

This would cause approximately 25% of generated objects to have a null field for prefix and/or suffix

Modules

Details on each of the modules can be found below 👇

All modules:

Link copied to clipboard

Contains the interfaces and Faker implementation that power Satisfaketion.

Link copied to clipboard
Link copied to clipboard

This module contains a collection of useful generators to create fantastic fake data

Link copied to clipboard

This module contains a collection of useful mutators.