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

//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的测试支持来处理所有事情,您可能会更喜欢@WithMockUserspring-security-test中的相关测试支持。

10-08 19:30