在我的一个测试课程中,我使用:
//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
最佳答案
“上下文”一词使您感到困惑。
这是两个非常不同的“上下文”。@DirtiesContext
与测试ApplicationContext
有关;而SecurityContext
是Spring Security的一部分,与ApplicationContext
无关。
因此,如果您在Spring Security的SecurityContext
中设置了SecurityContextHolder
,则在测试完成后将其删除是您的工作。
后者需要您手动进行。如果您想让Spring Security的测试支持来处理所有事情,您可能会更喜欢@WithMockUser
和spring-security-test
中的相关测试支持。