@Test
    void testCallingProviderMethods() {
        final ProxyConfigProvidersModule configProvidersModule = new ProxyConfigProvidersModule();
        final ProxyConfigProvider proxyConfigProvider = new ProxyConfigProvider(new ProxyConfig());

        SoftAssertions.assertSoftly(softAssertions -> {
            Arrays.stream(ProxyConfigProvidersModule.class.getDeclaredMethods())
                    .filter(method ->
                            !method.getName().endsWith(GenerateProxyConfigProvidersModule.THROWING_METHOD_SUFFIX))
                    .forEach(method -> {
                        LOGGER.debug("method: {}", method.getName());

                        try {
                            final Object config = method.invoke(configProvidersModule, proxyConfigProvider);
                            softAssertions.assertThat(config)
                                    .withFailMessage(() ->
                                            LogUtil.message("method {} returned null", method.getName()))
                                    .isNotNull();

                            final String className = method.getName()
                                    .replaceAll("^get", "")
                                    .replaceAll("[0-9]$", "");

                            if (method.getName().equals("getPathConfig")) {
                                // StroomPathConfig is also mapped to PathConfig
                                softAssertions.assertThat(config.getClass())
                                        .isEqualTo(ProxyPathConfig.class);
                            } else if (method.getName().equals("getAbstractOpenIdConfig")) {
                                // ProxyOpenIdConfig is also mapped to OpenIdConfig
                                softAssertions.assertThat(config.getClass())
                                        .isEqualTo(ProxyOpenIdConfig.class);
//                            } else if (method.getName().equals("getRepoConfig")) {
//                                // StroomPathConfig is also mapped to PathConfig
//                                softAssertions.assertThat(config.getClass())
//                                        .isEqualTo(ProxyRepoConfig.class);
//                            } else if (method.getName().equals("getRepoDbConfig")) {
//                                // StroomPathConfig is also mapped to PathConfig
//                                softAssertions.assertThat(config.getClass())
//                                        .isEqualTo(ProxyDbConfig.class);
                            } else {
                                softAssertions.assertThat(config.getClass().getSimpleName())
                                        .withFailMessage(LogUtil.message("method {} returned {}, expecting {}",
                                                method.getName(),
                                                config.getClass().getName(),
                                                className))
                                        .isEqualTo(className);
                            }

                        } catch (IllegalAccessException | InvocationTargetException e) {
                            throw new RuntimeException(e);
                        }
                    });
        });
    }
If this fails you probably want to run {@link GenerateProxyConfigProvidersModule} to generate
the missing provider methods
stroom-proxy/stroom-proxy-app/src/test/java/stroom/proxy/app/guice/TestProxyConfigProvidersModule.java