gpt4 book ai didi

java - 将 SecurityContextHolder.setContext(...) 设置为模拟,即使使用 @DirtiesContext 也会传递到不同的测试类

转载 作者:行者123 更新时间:2023-12-02 11:16:51 25 4
gpt4 key购买 nike

在我的一个测试类(class)中,我使用:

//Make a security context
SecurityContext securityContext = mock( SecurityContext.class );
SecurityContextHolder.setContext( securityContext );

然后我在上面设置了一些东西。

在另一个测试类中,由于该模拟仍然存在,我失败了。我在所有测试类上添加了@DirtiesContext,但它仍然发生。当我检查第二类中的安全上下文的类时,它说它是一个模拟。

如何正确重置类(class)之间的所有内容?

第一个类的运行方式为:

@RunWith( SpringJUnit4ClassRunner.class )
@SpringBootTest(
webEnvironment = SpringBootTest.WebEnvironment.RANDOM_PORT
)
@DirtiesContext

第二个就是:

@RunWith( SpringJUnit4ClassRunner.class )
@DirtiesContext

最佳答案

“上下文”这个词让你感到困惑。

这是两个截然不同的“上下文”。

@DirtiesContext与测试ApplicationContext相关;而 SecurityContext 是 Spring Security 的一部分,与 ApplicationContext 无关。

因此,如果您在 Spring Security 的 SecurityContextHolder 中设置了 SecurityContext,那么您的工作就是在测试完成后将其删除。

后者需要您手动操作。如果您希望 Spring Security 的测试支持处理所有事情,那么您可能会对 @WithMockUser 以及 spring-security-test 中的相关测试支持感到满意。

关于java - 将 SecurityContextHolder.setContext(...) 设置为模拟,即使使用 @DirtiesContext 也会传递到不同的测试类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50206123/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com