@Test
public void testIfDelegatesImplementAllMethods() throws IllegalAccessException, IllegalArgumentException, InvocationTargetException {

	// For each method in the Configuration class...
	Method[] confMethods = Configuration.class.getDeclaredMethods();
	Method[] delegateMethods = DelegatingConfiguration.class.getDeclaredMethods();
	for (Method configurationMethod : confMethods) {
		if (!Modifier.isPublic(configurationMethod.getModifiers()) ) {
			continue;
		}
		boolean hasMethod = false;
		// Find matching method in wrapper class and call it
		lookForWrapper: for (Method wrapperMethod : delegateMethods) {
			if (configurationMethod.getName().equals(wrapperMethod.getName())) {
				// Get parameters for method
				Class<?>[] wrapperMethodParams = wrapperMethod.getParameterTypes();
				Class<?>[] configMethodParams = configurationMethod.getParameterTypes();
				if (wrapperMethodParams.length != configMethodParams.length) {
					continue;
				}
				for (int i = 0; i < wrapperMethodParams.length; i++) {
					if (wrapperMethodParams[i] != configMethodParams[i]) {
						continue lookForWrapper;
					}
				}
				hasMethod = true;
				break;
			}
		}
		assertTrue("Configuration method '" + configurationMethod.getName() + 
				"' has not been wrapped correctly in DelegatingConfiguration wrapper", hasMethod);
	}
}