package com.sishuok.matcher; import org.hamcrest.Description; import org.hamcrest.Factory; import org.hamcrest.Matcher; import org.hamcrest.TypeSafeMatcher; import org.springframework.beans.BeanWrapperImpl; /** * <p>User: Zhang Kaitao * <p>Date: 13-12-29 * <p>Version: 1.0 */ public class HasProperty<T> extends TypeSafeMatcher<T> { private String propertyNames; public HasProperty(String propertyNames) { this.propertyNames = propertyNames; } @Override public boolean matchesSafely(T obj) { try { BeanWrapperImpl beanWrapper = new BeanWrapperImpl(obj); return beanWrapper.getPropertyValue(propertyNames) != null; } catch (Exception e) { return false; } } @Override public void describeMismatchSafely(T item, Description mismatchDescription) { mismatchDescription.appendText("no ").appendValue(propertyNames).appendText(" in ").appendValue(item); } @Override public void describeTo(Description description) { description.appendText("hasProperty(").appendValue(propertyNames).appendText(")"); } @Factory public static <T> Matcher<T> hasProperty(String propertyNames) { return new HasProperty<T>(propertyNames); } }