0

我有一个受 Spring Security 保护的访问控制的 Grails 应用程序。我正在尝试创建一个测试用户,然后从登录屏幕使用相同的用户登录,然后遍历我的屏幕。似乎是一个相当普遍的尝试和做的事情。

然而,在(假设)成功创建测试用户之后(在测试规范中,而不是 Bootstrap.groovy),尝试登录时找不到相同的用户。

当我在应用程序代码中执行 User.list() (我在登录点有一个断点)时,没有。但它们存在于测试中。这就像有两个单独的会话。

有谁知道这样做的正确方法?如果没有明显的答案,我很乐意分享代码。

4

1 回答 1

-1

事实证明,@Rollback注释的作用比我想象的要多。而(根据文档)它;

确保每个测试方法在回滚的事务中运行

它还创建了一个完全独立于应用程序会话的测试管理事务。因此,如果 @Rollback 注释被用于我上面的目的,在测试中创建的用户(setup()例如)将永远不会在应用程序中看到,因此 Spring Security 的身份验证逻辑将在加载用户失败时失败.

请注意,删除@Rollover注释后,必须手动创建事务块,例如:

User.withTransaction {
 // ... do work here
}
于 2019-01-16T17:31:17.800 回答