Testing bad configuration on micronaut - krickert/search-api GitHub Wiki

When writing code, I often have to create edge cases that check for bad configuration. So I created a generic way to handle this

import io.micronaut.context.ApplicationContext;
import io.micronaut.context.exceptions.ConfigurationException;
import org.junit.jupiter.api.Assertions;
import org.junit.jupiter.api.function.Executable;

import java.util.Map;
import java.util.Set;

public class MicronautConfigTestUtil {

    public static <T extends Exception> void errorConfigTest(
            String configFile,
            Class<T> expectedException,
            String expectedMessage,
            Class<?>... beanClasses) {
        
        Executable executable = () -> {
            try (ApplicationContext context = ApplicationContext.builder()
                    .properties(Map.of("micronaut.config.files", configFile))
                    .eagerInitConfiguration(true)
                    .eagerInitSingletons(true)
                    .start()) {

                // Force bean instantiation if specific classes are provided
                if (beanClasses.length > 0) {
                    for (Class<?> beanClass : beanClasses) {
                        context.getBean(beanClass);
                    }
                }
            }
        };

        T thrownException = Assertions.assertThrows(expectedException, executable);
        Assertions.assertTrue(thrownException.getMessage().contains(expectedMessage),
                "Expected error message to contain: " + expectedMessage);
    }
}