Check to see if a property on the specified object, objectWithProperty, matches its
expected value, and report the result in
the returned HavePropertyMatchResult.
Check to see if a property on the specified object, objectWithProperty, matches its
expected value, and report the result in
the returned HavePropertyMatchResult. The objectWithProperty is
usually the value to the left of a should or must invocation. For example, book
would be passed as the objectWithProperty in:
book should have (title ("Moby Dick"))
the object with the property against which to match
the HavePropertyMatchResult that represents the result of the match
Compose this HavePropertyMatcher with the passed function, returning a new HavePropertyMatcher.
Compose this HavePropertyMatcher with the passed function, returning a new HavePropertyMatcher.
This method overrides compose on Function1 to
return a more specific function type of HavePropertyMatcher.
Trait extended by matcher objects, which may appear after the word
have, that can match against a property of the type specified by theHavePropertyMatcher's second type parameterP.HavePropertyMatcher's first type parameter,T, specifies the type that declares the property. The match will succeed if and only if the value of the property equals the specified value. The object containing the property is passed to theHavePropertyMatcher'sapplymethod. The result is aHavePropertyMatchResult[P]. AHavePropertyMatcheris, therefore, a function from the specified type,T, to aHavePropertyMatchResult[P].Although
HavePropertyMatcherandMatcherrepresent similar concepts, they have no inheritance relationship becauseMatcheris intended for use right aftershouldormustwhereasHavePropertyMatcheris intended for use right afterhave.A
HavePropertyMatcheressentially allows you to write statically typed property assertions similar to the dynamic ones that use symbols:One good way to organize custom matchers is to place them inside one or more traits that you can then mix into the suites or specs that need them. Here's an example that includes two methods that produce
HavePropertyMatchers:Each time the
titlemethod is called, it returns a newHavePropertyMatcher[Book, String]that can be used to match against thetitleproperty of theBookpassed to itsapplymethod. Because the type parameter of these twoHavePropertyMatchers isBook, they can only be used with instances of that type. (The compiler will enforce this.) The match will succeed if thetitleproperty equals the value passed asexpectedValue. If the match succeeds, thematchesfield of the returnedHavePropertyMatchResultwill betrue. The second field,propertyName, is simply the string name of the property. The third and fourth fields,expectedValueandactualValueindicate the expected and actual values, respectively, for the property. Here's an example that uses theseHavePropertyMatchers:These matches should succeed, but if for example the first property,
title ("Moby Dick"), were to fail, you would get an error message like:For more information on
HavePropertyMatchResultand the meaning of its fields, please see the documentation forHavePropertyMatchResult. To understand whyHavePropertyMatcheris contravariant in its type parameter, see the section entitled "Matcher's variance" in the documentation forMatcher.