取得领先
VMware 提供培训和认证,以加速您的进步。
了解更多[callout title=2015 年 3 月 31 日更新]此博客已过时且不再维护。 请参考参考文档的 测试部分 以获取更新的文档。[/callout]
在我的 之前的博客 中,我们探讨了如何使用 Spring MVC Test 进行测试支持。 现在,我们将了解相同的支持如何与 Spring Test MVC HtmlUnit 一起使用。
[callout title=最低版本]Spring Security 测试支持不适用于 spring-test-mvc-htmlunit-1.0.0.M1.jar。 相反,您只需使用最新的快照。 这是由于进行了一些细微修改,以允许 Spring Security 和 MockMvcHtmlUnitDriver 一起工作。[/callout]
HtmlUnit
和 Spring Security 集成的设置与 使用 Spring MVC Test 和 HtmlUnit 的设置非常相似。 下面我们重点介绍不同之处
@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(classes = {WebMvcConfig.class, WebSecurityConfig.class, MockDataConfig.class})
@WebAppConfiguration
@TestExecutionListeners(listeners={ServletTestExecutionListener.class,
DependencyInjectionTestExecutionListener.class,
DirtiesContextTestExecutionListener.class,
TransactionalTestExecutionListener.class,
WithSecurityContextTestExcecutionListener.class})
@WithMockUser
public class MockMvcHtmlUnitCreateMessageTest {
@Autowired
private Filter springSecurityFilterChain;
@Autowired
private WebApplicationContext context;
private WebClient webClient;
@Before
public void setup() {
MockMvc mockMvc = MockMvcBuilders
.webAppContextSetup(context)
.addFilters(springSecurityFilterChain)
.build();
driver = new MockMvcHtmlUnitDriver(mockMvc, true);
}
}
[callout title=源代码]您可以在 github 上 找到此博客的完整源代码[/callout]
WebSecurityConfig
添加到 @ContextConfiguration
WithSecurityContextTestExcecutionListener
,就像我们在 测试基于方法的安全性 时所做的那样。WithSecurityContext
注解。 在本例中,我们使用了 @WithMockUser,但方法安全部分中使用的任何注解都可以利用。springSecurityFilterChain
并将其添加到 MockMvcBuilders
过滤器。现在我们可以运行我们的测试,假设我们已使用用户名“user”和角色“ROLE_USER”进行身份验证。 当然,就像我们在方法安全性中所做的那样,我们可以轻松更改注释以反映我们要运行的用户。
无需在测试之前显式进行身份验证,我们就可以确保更轻松地隔离我们的测试。 通过简单地以用户身份运行,我们大大简化了测试(当身份验证像 SSO 工作流程一样复杂时尤其如此)。 我们还通过消除实际进行身份验证的需要来大大加快测试速度。 更重要的是,我们可以使用上面概述的相同步骤将 Spring Security Test 支持与 HtmlUnit/WebDriver 或 HtmlUnit/Geb 集成。
我们现在已经介绍了 Spring Security Testing 支持如何使方法安全性、Web 安全性和基于 HtmlUnit 的测试更容易。 我们希望您喜欢这个博客系列。
如果您对此博客系列或 Spring Security Test 支持有任何反馈,我鼓励您通过 JIRA、通过评论部分或在 Twitter 上 ping 我 @rob_winch 与我们联系。 当然,最好的反馈来自 贡献。