### Question:
LazyProperties implements Properties { @SuppressWarnings("unchecked") @Override public <T> ValueModel<T> getReadOnlyProperty(String propertyName) { return (ValueModel<T>) getProperty(propertyName, false); } LazyProperties(Class<?> beanClass, Set<String> propertyNames, Set<String> dataSetPropertyNames, 
			PropertyWithDependencySupply supply); @SuppressWarnings("unchecked") @Override ValueModel<T> getReadOnlyProperty(String propertyName); @SuppressWarnings("unchecked") @Override ValueModel<T> getReadWriteProperty(String propertyName); @Override Class<?> getPropertyType(String propertyName); @Override DataSetValueModel getDataSetProperty(String propertyName);  }### Answer:
@Test public void givenGetReadOnlyPropertyOnce_whenGetReadOnlyPropertyAgain_thenReturnSameInstance() { PropertyWithDependencySupply supply = mock(PropertyWithDependencySupply.class); when(supply.createProperty(PROPERTY_NAME)).thenReturn(mock(PropertyValueModel.class)); LazyProperties lazyProperties = createLazyProperties(supply); ValueModel<Object> property = lazyProperties.getReadOnlyProperty(PROPERTY_NAME); ValueModel<Object> cachedProperty = lazyProperties.getReadOnlyProperty(PROPERTY_NAME); assertThat(cachedProperty, sameInstance(property)); }