@Override
    public boolean equals(Object obj) {
        if (obj instanceof DelegatingConfiguration) {
            DelegatingConfiguration other = (DelegatingConfiguration) obj;
            return this.prefix.equals(other.prefix)
                    && this.backingConfig.equals(other.backingConfig);
        } else {
            return false;
        }
    }
@Test
    void testIfDelegatesImplementAllMethods() throws IllegalArgumentException {

        // For each method in the Configuration class...
        Method[] confMethods = Configuration.class.getDeclaredMethods();
        Method[] delegateMethods = DelegatingConfiguration.class.getDeclaredMethods();

        for (Method configurationMethod : confMethods) {
            final int mod = configurationMethod.getModifiers();
            if (!Modifier.isPublic(mod) || Modifier.isStatic(mod)) {
                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;
                }
            }

            assertThat(hasMethod)
                    .as(
                            "Configuration method '"
                                    + configurationMethod.getName()
                                    + "' has not been wrapped correctly in DelegatingConfiguration wrapper")
                    .isTrue();
        }
    }