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
This method is used to compare the receiver object (this
)
with the argument object (arg0
) for equivalence
This method is used to compare the receiver object (this
)
with the argument object (arg0
) for equivalence.
The default implementations of this method is an equivalence relation:
x
of type Any
,
x.equals(x)
should return true
.x
and y
of type
Any
, x.equals(y)
should return true
if and only
if y.equals(x)
returns true
.x
, y
, and z
of type AnyRef
if x.equals(y)
returns true
and
y.equals(z)
returns
true
, then x.equals(z)
should return true
.
If you override this method, you should verify that
your implementation remains an equivalence relation.
Additionally, when overriding this method it is often necessary to
override hashCode
to ensure that objects that are
"equal" (o1.equals(o2)
returns true
)
hash to the same Int
(o1.hashCode.equals(o2.hashCode)
).
the object to compare against this object for equality.
true
if the receiver object is equivalent to the argument; false
otherwise.
Returns a hash code value for the object
Returns a hash code value for the object.
The default hashing algorithm is platform dependent.
Note that it is allowed for two objects to have identical hash
codes (o1.hashCode.equals(o2.hashCode)
) yet not be
equal (o1.equals(o2)
returns false
). A
degenerate implementation could always return 0
.
However, it is required that if two objects are equal
(o1.equals(o2)
returns true
) that they
have identical hash codes
(o1.hashCode.equals(o2.hashCode)
). Therefore, when
overriding this method, be sure to verify that the behavior is
consistent with the equals
method.
Returns a string representation of the object
Returns a string representation of the object.
The default representation is platform dependent.
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
'sapply
method. The result is aHavePropertyMatchResult[P]
. AHavePropertyMatcher
is, therefore, a function from the specified type,T
, to aHavePropertyMatchResult[P]
.Although
HavePropertyMatcher
andMatcher
represent similar concepts, they have no inheritance relationship becauseMatcher
is intended for use right aftershould
ormust
whereasHavePropertyMatcher
is intended for use right afterhave
.A
HavePropertyMatcher
essentially 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
HavePropertyMatcher
s:Each time the
title
method is called, it returns a newHavePropertyMatcher[Book, String]
that can be used to match against thetitle
property of theBook
passed to itsapply
method. Because the type parameter of these twoHavePropertyMatcher
s isBook
, they can only be used with instances of that type. (The compiler will enforce this.) The match will succeed if thetitle
property equals the value passed asexpectedValue
. If the match succeeds, thematches
field of the returnedHavePropertyMatchResult
will betrue
. The second field,propertyName
, is simply the string name of the property. The third and fourth fields,expectedValue
andactualValue
indicate 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
HavePropertyMatchResult
and the meaning of its fields, please see the documentation forHavePropertyMatchResult
. To understand whyHavePropertyMatcher
is contravariant in its type parameter, see the section entitled "Matcher's variance" in the documentation forMatcher
.