org.hamcrest.beans
Class HasPropertyWithValue<T>

java.lang.Object
  extended by org.hamcrest.BaseMatcher<T>
      extended by org.hamcrest.TypeSafeMatcher<T>
          extended by org.hamcrest.beans.HasPropertyWithValue<T>
All Implemented Interfaces:
Matcher<T>, SelfDescribing

public class HasPropertyWithValue<T>
extends TypeSafeMatcher<T>

Matcher that asserts that a JavaBean property on an argument passed to the mock object meets the provided matcher. This is useful for when objects are created within code under test and passed to a mock object, and you wish to assert that the created object has certain properties.

Example Usage

Consider the situation where we have a class representing a person, which follows the basic JavaBean convention of having get() and possibly set() methods for it's properties: public class Person { private String name;

public Person(String person) { this.person = person; }

public String getName() { return name; } } And that these person objects are generated within a piece of code under test (a class named PersonGenerator). This object is sent to one of our mock objects which overrides the PersonGenerationListener interface: public interface PersonGenerationListener { public void personGenerated(Person person); } In order to check that the code under test generates a person with name "Iain" we would do the following:

Mock personGenListenerMock = mock(PersonGenerationListener.class); personGenListenerMock.expects(once()).method("personGenerated").with(and(isA(Person.class), hasProperty("Name", eq("Iain"))); PersonGenerationListener listener = (PersonGenerationListener)personGenListenerMock.proxy();

If an exception is thrown by the getter method for a property, the property does not exist, is not readable, or a reflection related exception is thrown when trying to invoke it then this is treated as an evaluation failure and the matches method will return false.

This matcher class will also work with JavaBean objects that have explicit bean descriptions via an associated BeanInfo description class. See the JavaBeans specification for more information:

http://java.sun.com/products/javabeans/docs/index.html

Author:
Iain McGinniss, Nat Pryce, Steve Freeman

Constructor Summary
HasPropertyWithValue(java.lang.String propertyName, Matcher value)
           
 
Method Summary
 void describeTo(Description description)
          Generates a description of the object.
static
<T> Matcher<T>
hasProperty(java.lang.String propertyName, Matcher value)
           
 boolean matchesSafely(T argument)
          Subclasses should implement this.
 
Methods inherited from class org.hamcrest.TypeSafeMatcher
matches
 
Methods inherited from class org.hamcrest.BaseMatcher
_dont_implement_Matcher___instead_extend_BaseMatcher_, toString
 
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, wait, wait, wait
 

Constructor Detail

HasPropertyWithValue

public HasPropertyWithValue(java.lang.String propertyName,
                            Matcher value)
Method Detail

matchesSafely

public boolean matchesSafely(T argument)
Description copied from class: TypeSafeMatcher
Subclasses should implement this. The item will already have been checked for the specific type and will never be null.

Specified by:
matchesSafely in class TypeSafeMatcher<T>

describeTo

public void describeTo(Description description)
Description copied from interface: SelfDescribing
Generates a description of the object. The description may be part of a a description of a larger object of which this is just a component, so it should be worded appropriately.

Parameters:
description - The description to be built or appended to.

hasProperty

public static <T> Matcher<T> hasProperty(java.lang.String propertyName,
                                         Matcher value)