Ecosyste.ms: Awesome
An open API service indexing awesome lists of open source software.
https://github.com/varabyte/truthish
A Kotlin multiplatform unit testing library inspired by / similar to Google Truth.
https://github.com/varabyte/truthish
kotlin kotlin-android kotlin-ios kotlin-js kotlin-jvm kotlin-library kotlin-linux kotlin-macos kotlin-mingw kotlin-multiplatform unit-testing
Last synced: 3 months ago
JSON representation
A Kotlin multiplatform unit testing library inspired by / similar to Google Truth.
- Host: GitHub
- URL: https://github.com/varabyte/truthish
- Owner: varabyte
- License: apache-2.0
- Created: 2019-02-18T06:24:45.000Z (almost 6 years ago)
- Default Branch: main
- Last Pushed: 2024-07-30T04:54:08.000Z (6 months ago)
- Last Synced: 2024-08-02T09:27:21.811Z (6 months ago)
- Topics: kotlin, kotlin-android, kotlin-ios, kotlin-js, kotlin-jvm, kotlin-library, kotlin-linux, kotlin-macos, kotlin-mingw, kotlin-multiplatform, unit-testing
- Language: Kotlin
- Homepage:
- Size: 416 KB
- Stars: 102
- Watchers: 1
- Forks: 3
- Open Issues: 3
-
Metadata Files:
- Readme: README.md
- Contributing: CONTRIBUTING.md
- License: LICENSE
Awesome Lists containing this project
- awesome-kotlin-multiplatform - Truthish - Multiplatform library with a testing API inspired by Google Truth. (Libraries / Test)
README
## Truthish
![version](https://img.shields.io/badge/version-1.0.1-blue.svg)
![truthish tests](https://github.com/varabyte/truthish/actions/workflows/gradle-test-all.yml/badge.svg)
![coverage badge](https://img.shields.io/endpoint?url=https://gist.githubusercontent.com/bitspittle/01b6bfe88483946d9f5438f5616d9b9f/raw/truthish-coverage-badge.json)
![targets](https://img.shields.io/badge/targets-JVM,_JS,_Win,_Linux,_Mac,_Android,_iOS-white.svg)
A testing API inspired by [Google Truth](https://github.com/google/truth) but
rewritten in Kotlin from the ground up, so it can be used in Kotlin
multiplatform projects.For example, you can write `assertThat` checks in tests like this:
```kotlin
import com.varabyte.truthish.*fun isEven(num: Int) = (num % 2) == 0
fun square(num: Int) = (num * num)@Test
fun testEvenOdd() {
assertThat(isEven(1234)).isTrue()
assertThat(isEven(1235)).isFalse()
}@Test
fun testSum() {
val nums = listOf(1, 2, 3, 4, 5)
assertThat(nums.sum()).isEqualTo(15)
}@Test
fun testMap() {
assertThat(listOf(1, 2, 3, 4, 5).map { square(it) })
.containsExactly(1, 4, 9, 16, 25)
.inOrder()
}@Test
fun customMessage() {
assertWithMessage("Unexpected list size")
.that(listOf(1, 2, 3, 4, 5)).hasSize(5)
}@Test
fun testDivideByZeroException() {
val ex = assertThrows {
10 / 0
}
assertThat(ex.message).isEqualTo("/ by zero")
}
```You can read the [Google Truth documentation](https://truth.dev/) for why they
believe their fluent approach to assertions is both more readable and produces
cleaner error messages, but let's break one of the tests above to see a
specific example error message:```kotlin
@Test
fun testMapButIntentionallyBroken() {
assertThat(listOf(1, 2, 3, 4, 5).map { square(it) })
.containsExactly(1, 4, 9, 15, 26) // <-- Ooops, messed up 16 and 25 here
.inOrder()
}
```Output:
```text
A collection did not contain element(s)Expected exactly all elements from: [ 1, 4, 9, 15, 26 ]
But was : [ 1, 4, 9, 16, 25 ]
Missing : [ 15, 26 ]
Extraneous : [ 16, 25 ]
```# Using Truthish in Your Project
## Multiplatform
To use *Truthish* in your multiplatform application, declare the following dependencies:
```kotlin
// build.gradle.kts
// Multiplatformrepositories {
mavenCentral()
}kotlin {
jvm()
js(IR) {
browser()
}linuxX64()
macosArm64() // Mac M1+
macosX64() // Mac Intel
mingwX64() // Windows
iosX64() // iOS Intel
iosArm64() // iOS M1+
iosSimulatorArm64()
android()sourceSets {
commonTest.dependencies {
implementation("com.varabyte.truthish:truthish:1.0.1")
implementation(kotlin("test"))
}
}
}
```## Single platform
You can also use *Truthish* in non-multiplatform projects as well:
### JVM
```kotlin
// build.gradle.ktsrepositories {
mavenCentral()
}dependencies {
// ...testImplementation(kotlin("test"))
testImplementation("com.varabyte.truthish:truthish:1.0.1")
}
```### Android
```kotlin
// build.gradle.ktsrepositories {
mavenCentral()
}android { /* ... */ }
dependencies {
// ...// If used in tests that are run on the host (i.e. your dev machine)
testImplementation("com.varabyte.truthish:truthish:1.0.1")// If used in tests that are run on the device
androidTestImplementation("com.varabyte.truthish:truthish:1.0.1")
}
```