我有一个Spring Boot应用程序,我在其中使用测试容器进行测试.

我想在测试之间清理我的数据库.我在Keycloak测试容器中创建了一个用户,以使用其ID进行进一步的测试,但该用户几乎在每次测试中都会发生变化,我想删除该用户并在每次测试后清理Keycloak的数据库.

我以这种方式创建了Keycloak测试容器:

@Container
static KeycloakContainer keycloakContainer = new KeycloakContainer()
            .withRealmImportFile("test-realm-export.json")
            .withAdminUsername("admin1")
            .withAdminPassword("admin1");

我可以使用以下配置来清洁@AfterEach部分中的MariaDB测试容器.

@AfterEach
public void cleanUpEach() throws Exception {
   try (Connection connection = dataSource.getConnection()) {
     Resource resource = new ClassPathResource("/clean_up.sql");
     ScriptUtils.executeSqlScript(connection, resource);
   }
}

clean_up.sql包含以下行:

TRUNCATE TABLE table1;
TRUNCATE TABLE table2;

但问题是我也不知道如何清理Keycloat的数据库.

推荐答案

与此同时,我找到了解决方案.我不知道这是否是一个变通办法,但我想与您分享.

使用keycloat实例,我可以删除我在每次测试中修改的用户.

    private Keycloak getKeycloakInstance() {
        return KeycloakBuilder.builder()
                .serverUrl(keycloakContainer.getAuthServerUrl())
                .realm("master")
                .clientId("admin-cli")
                .username(keycloakContainer.getAdminUsername())
                .password(keycloakContainer.getAdminPassword())
                .build();
    }

我将以下代码放入@AfterEach:

getKeycloakInstance().realm("test-realm").users().get(USER_ID).remove();

希望这有帮助!

Java相关问答推荐

试图弄清楚资源未能在我的Android应用程序中调用关闭警告

如何在Java中对自定义协议进行主机名验证?

使用包私有构造函数强制子类Java类

Mat. n_Delete()和Mat. n_release的区别

在spring—data中自动发现native—sql查询期间遇到重复的SQL别名[id]

我需要生成一个文件来整合每个特性执行的所有JSON结果

为什么JAVA&S清洁器使用链表而不是并发HashSet?

Java LocalTime.parse在本地PC上的Spring Boot中工作,但在Docker容器中不工作

Java Mooc.fi Part 12_01.Hideout -返回和删除方法

MimeMessage emlMessage=new MimeMessage(Session,emlInputStream);抛出InvocationTargetException

每次FXMLLoader调用ApplationConext.getBean(类)时创建@Component的新实例

如何只修改父类ChroniclerView位置0处的第一个嵌套ChroniclerView(child)元素?

如何将Pane的图像快照保存为BMP?

在Spring Boot JPA for MySQL中为我的所有类创建Bean时出错?

记录是类的语法糖吗?

在不使用instanceof或强制转换的情况下从父类变量调用子类方法

JXBrowser是否支持加载Chrome扩展?

如何利用OpenTelemeter将初始值(零)输出到普罗米修斯

当我将JTextField的getText函数与相等的String进行比较时;t返回true

如何在单元测试中获得我的装饰Mapstruct映射器的实例?