// Copyright 2015 Eivind Vegsundvåg // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. // You may obtain a copy of the License at // // http://www.apache.org/licenses/LICENSE-2.0 // // Unless required by applicable law or agreed to in writing, software // distributed under the License is distributed on an "AS IS" BASIS, // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. // See the License for the specific language governing permissions and // limitations under the License. package ninja.eivind.testutils; import java.lang.reflect.Field; import java.lang.reflect.Method; import java.lang.reflect.Modifier; import static org.junit.Assert.*; public class DataObjectTester<T> { private Class<T> clazz; private T object; public DataObjectTester(Class<T> clazz, T object) { this.clazz = clazz; this.object = object; } public void testAllFieldsArePrivate() { final Field[] fields = clazz.getDeclaredFields(); for (final Field field : fields) { assertFalse("Field is not accessible", field.isAccessible()); } } public void testAllFieldsHaveProperGetters() throws Exception { final Field[] fields = clazz.getDeclaredFields(); for (final Field field : fields) { final String fieldName = field.getName(); char[] fieldNameChars = fieldName.toCharArray(); fieldNameChars[0] = Character.toUpperCase(fieldNameChars[0]); String upperCasedFieldName = new String(fieldNameChars); Method method = clazz.getMethod("get" + upperCasedFieldName); boolean getterIsAccessible = method.getModifiers() == Modifier.PUBLIC; if (getterIsAccessible) { field.setAccessible(true); Object invoke = method.invoke(object); assertEquals("Getter returns an equal object to the field object", field.get(object), invoke); } } } public void run() throws Exception { testAllFieldsArePrivate(); testAllFieldsHaveProperGetters(); } }