将SecurityContextHolder.setContext(...)设置为模拟,即使使用@DirtiesContext

时间:2018-05-07 01:48:42

标签: java spring spring-boot spring-test

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

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

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

在另一个测试课程中,我因为那个模拟器仍在那里而失败。我在所有测试类上添加了@DirtiesContext但仍然会发生。当我检查第二类中的安全上下文的类时,它表示它是一个模拟。

如何正确重置课程之间的所有内容?

第一个类运行为:

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

第二个是:

@RunWith( SpringJUnit4ClassRunner.class )
@DirtiesContext

1 个答案:

答案 0 :(得分:1)

单词" context"让你感到困惑。

这是两个截然不同的背景"。

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

因此,如果您在Spring Security的SecurityContext中设置SecurityContextHolder,那么一旦您的测试完成,您就可以将其删除。

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