Skip to main content
Version: 5.9 🚧

Partial Matches

If kotest fails to match a String or an instance of a data class, it may try to find something similar. For instance, in the following example two fields out of three match, so kotest considers sweetGreenApple to be 66.6% similar to sweetRedApple:

listOf(sweetGreenApple, sweetGreenPear) shouldContain (sweetRedApple)

(snip)

PossibleMatches:
expected: Fruit(name=apple, color=red, taste=sweet),
but was: Fruit(name=apple, color=green, taste=sweet),
The following fields did not match:
"color" expected: <"red">, but was: <"green">

By default, kotest will only consider pairs of objects that have more than 50% matching fields. If needed, we can change similarityThresholdInPercent in configuration.

Likewise, if kotest does not detect an exact match, it may try to find a similar String. In the output, the matching part of String is indicated with plus signs:

listOf("sweet green apple", "sweet red plum") shouldContain ("sweet green pear")

(snip)

PossibleMatches:
Match[0]: part of slice with indexes [0..11] matched actual[0..11]
Line[0] ="sweet green apple"
Match[0]= ++++++++++++-----

By default, searching for similar strings is only enabled when both expected and actuals strings' lengthes are between 8 and 1024.


If we need to consider shorter or longer expected values, we can change configuration values named `minSubstringSubmatchingSize` and `maxSubtringSubmatchingSize`.
Likewise, should we need to consider shorter or longer actual values, we can change configuration values named `minValueSubmatchingSize` and `maxValueSubmatchingSize`.

By default, possible matches that are less than 66% similar are dismissed, and that default can be changed via `similarityThresholdInPercentForStrings` value in configuration.

To disable searching for similar strings altogether, set `enabledSubmatchesInStrings` to `false` in configuration.