Ecosyste.ms: Awesome
An open API service indexing awesome lists of open source software.
https://github.com/npryce/hamkrest
Hamcrest for Kotlin
https://github.com/npryce/hamkrest
assertions hamcrest kotlin matchers predicates test-automation testing
Last synced: about 1 month ago
JSON representation
Hamcrest for Kotlin
- Host: GitHub
- URL: https://github.com/npryce/hamkrest
- Owner: npryce
- License: apache-2.0
- Created: 2015-11-11T09:46:44.000Z (about 9 years ago)
- Default Branch: jvm
- Last Pushed: 2024-05-16T09:23:35.000Z (6 months ago)
- Last Synced: 2024-08-02T06:16:48.424Z (4 months ago)
- Topics: assertions, hamcrest, kotlin, matchers, predicates, test-automation, testing
- Language: Kotlin
- Size: 780 KB
- Stars: 344
- Watchers: 11
- Forks: 31
- Open Issues: 7
-
Metadata Files:
- Readme: README.md
- License: LICENSE
Awesome Lists containing this project
- awesome-kotlin-cn - HamKrest - Hamcrest for Kotlin (开源库和框架 / 测试)
README
HamKrest - Hamcrest for Kotlin
==============================A reimplementation of Hamcrest to take advantage of [Kotlin](https://kotlinlang.org/) language features.
[![Kotlin](https://img.shields.io/badge/kotlin-1.3.11-blue.svg)](http://kotlinlang.org)
[![Build Status](https://travis-ci.org/npryce/hamkrest.svg?branch=master)](https://travis-ci.org/npryce/hamkrest)
[![Maven Central](https://img.shields.io/maven-central/v/com.natpryce/hamkrest.svg)](http://search.maven.org/#search%7Cga%7C1%7Cg%3A%22com.natpryce%22%20AND%20a%3A%22hamkrest%22)Note: as of version 1.4.0.0, you must add kotlin-reflect to the classpath to use HamKrest's reflective features.
When working in Kotlin, Hamkrest provides these benefits over using the Java Hamcrest library:
* Kotlin's type system means that developers don't have to worry about getting the variance of generic signatures right. Variance is defined on the abstract Matcher type and Kotlin makes sure composition and subtyping work together the way you expect.
* Syntactic sugar. You can negate a matcher with the ! operator and compose matchers with infix `and` and `or` functions:``` kotlin
import com.natpryce.hamkrest.assertion.assert
...
assertThat("xyzzy", startsWith("x") and endsWith("y") and !containsSubstring("a"))
```
* Easier to extend. You can convert named unary predicates into matchers.``` kotlin
val isBlank = Matcher(String::isBlank)
assertThat(input, isBlank)
```As a shortcut, you can pass named functions to the `assertThat`, `and`, `or` and many other functions that take a matcher.
``` kotlin
assertThat(input, String::isBlank)
```You can also convert a named binary predicate and the second argument to a matcher for first argument, which works well for extension methods.
``` kotlin
fun String.hasLength(n: Int): Boolean = this.length == nval isTheRightLength = Matcher(String::hasLength, 8)
assertThat(secretCode, isTheRightLength)
```You can use function and property references to match features of a value:
``` kotlin
val isLongEnough = has(String::length, greaterThan(8))assertThat(password, isLongEnough)
```All of these shortcuts produce good, human-readable diagnostics.
You can customise how diagnostics are generated by creating a project-specific `assert` object.
## More documentation
[More detailed documentation of specific library features is in the docs/ directory](docs/).