org.hamcrest.beans.HasPropertyWithValue Maven / Gradle / Ivy
Go to download
Show more of this group Show more artifacts with this name
Show all versions of hamcrest-library Show documentation
Show all versions of hamcrest-library Show documentation
A library of Hamcrest matchers - deprecated, please use "hamcrest" instead
/* Copyright (c) 2000-2006 hamcrest.org
*/
package org.hamcrest.beans;
import java.beans.PropertyDescriptor;
import java.lang.reflect.Method;
import org.hamcrest.Condition;
import org.hamcrest.Description;
import org.hamcrest.Factory;
import org.hamcrest.Matcher;
import org.hamcrest.TypeSafeDiagnosingMatcher;
import static org.hamcrest.Condition.matched;
import static org.hamcrest.Condition.notMatched;
import static org.hamcrest.beans.PropertyUtil.NO_ARGUMENTS;
/**
* 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
* @author Nat Pryce
* @author Steve Freeman
*/
public class HasPropertyWithValue extends TypeSafeDiagnosingMatcher {
private static final Condition.Step WITH_READ_METHOD = withReadMethod();
private final String propertyName;
private final Matcher
© 2015 - 2024 Weber Informatics LLC | Privacy Policy