Kluent
Fluent Assertion-Library for Kotlin
Install / Use
/learn @markusamshove/KluentREADME
Kluent
Kluent is a "Fluent Assertions" library written specifically for Kotlin.
It uses the Infix-Notations and Extension Functions of Kotlin to provide a fluent wrapper around the JUnit-Assertions.
Include it via gradle/maven
Kluent is hosted here at mavenCentral
Kluent-Android is hosted here at mavenCentral
Gradle
Replace {version} with the current version and chose one of the two artifacts, based on your target platform:
// Add jcenter as a repository for dependencies
repositories {
mavenCentral()
}
dependencies {
// for JVM:
testImplementation 'org.amshove.kluent:kluent:{version}'
// for Android:
testImplementation 'org.amshove.kluent:kluent-android:{version}'
// To get JUnit errors from kotlin.test, to e.g. enable diff windows in failure messages
testImplementation "org.jetbrains.kotlin:kotlin-test-junit:$kotlin_version"
}
Maven
Replace {version} with the current version
<dependency>
<groupId>org.amshove.kluent</groupId>
<artifactId>kluent</artifactId>
<version>{version}</version>
<type>pom</type>
</dependency>
Examples
More examples can be seen on the Site or in the tests.
assertEquals
"hello" shouldBeEqualTo "hello"
assertNotEquals
"hello" shouldNotBeEqualTo "world"
Assert that an Array/Iterable contains something
val alice = Person("Alice", "Bob")
val jon = Person("Jon", "Doe")
val list = listOf(alice, jon)
list shouldContain jon
Using backticks
Every method that is included in Kluent also has a "backtick version", to make it feel more like a describing sentence.
Some examples:
assertEquals
"hello" `should be equal to` "hello"
assertNotEquals
"hello" `should not be equal to` "world"
Building Kluent
All projects of Kluent are built with Gradle
The default gradlew build will only build the common and jvm module, to keep the build times as small as possible.
If you plan to submit a pull request, it is also fine if you just make sure it builds and tests against common
and jvm (which gradlew build will make sure of), because the rest of the heavy work will be done by Travis and
AppVeyor. That way you can keep your machine free from NodeJS and Kotlin Native :-)
To build the Android library, pass the parameter ANDROID to Gradle. This will build the common and android
artifacts. To pass the parameter, type:
gradlew build -PANDROID
To also build the JS module, pass JS:
gradlew build -PJS
To build native, pass:
gradlew build -PNATIVE
In these cases, the JVM module will also be built, because it is our primary target and everything should pass on the
JVM. To skip the JVM build, e.g. for testing only against Native or JS, pass SKIPVM:
gradlew build -PJS -PNATIVE -PSKIPJVM
This command will build common, js, native, but not jvm.
Where to put new features
If you plan to add a feature (e.g. an Assertion), it would be nice to first try adding it to the common module, as it
would then be available to all platforms. If it uses specific APIs, like classes from the Java standard library, then it
needs to go to the jvm module.
If you're unsure where to put a feature, or if you want to put something in the common module which needs platform
specific implementations, you can have a
look here (platformIsDigit
or platformClassName)
where a function in the common module calls a so called expect function, which is
defined here
in the common module and has
specific JVM
,
JS
and Native
implementation.
If you're still unsure how to make something platform independent, we can have a look together inside the PR :-)
Attribution
Parts of the assertSoftly feature are based
upon the great work of Kotest under the Apache 2.0 License.
Related Skills
gh-issues
344.1kFetch GitHub issues, spawn sub-agents to implement fixes and open PRs, then monitor and address PR review comments. Usage: /gh-issues [owner/repo] [--label bug] [--limit 5] [--milestone v1.0] [--assignee @me] [--fork user/repo] [--watch] [--interval 5] [--reviews-only] [--cron] [--dry-run] [--model glm-5] [--notify-channel -1002381931352]
node-connect
344.1kDiagnose OpenClaw node connection and pairing failures for Android, iOS, and macOS companion apps
frontend-design
96.8kCreate distinctive, production-grade frontend interfaces with high design quality. Use this skill when the user asks to build web components, pages, or applications. Generates creative, polished code that avoids generic AI aesthetics.
Writing Hookify Rules
96.8kThis skill should be used when the user asks to "create a hookify rule", "write a hook rule", "configure hookify", "add a hookify rule", or needs guidance on hookify rule syntax and patterns.
