领先一步
VMware提供培训和认证,以加速您的进步。
了解更多[提示 title=2015年3月31日更新]此博客已过时,不再维护。请参阅参考文档的测试部分以获取更新的文档。[/提示]
在我的上一篇博客中,我们探讨了如何将测试支持与Spring MVC Test一起使用。现在,我们将了解相同的支持如何与Spring Test MVC HtmlUnit一起使用。
[提示 title=最低版本]Spring Security 测试支持不适用于spring-test-mvc-htmlunit-1.0.0.M1.jar。相反,您只需使用最新的快照。这是由于进行了一些细微的修改,以允许Spring Security和MockMvcHtmlUnitDriver协同工作。[/提示]
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);
}
}
[提示 title=源代码]您可以在github上找到此博客的完整源代码[/提示]
WebSecurityConfig
添加到@ContextConfiguration
中。WithSecurityContextTestExcecutionListener
,就像我们在测试基于方法的安全时所做的那样。WithSecurityContext
注解。在这个例子中,我们使用了@WithMockUser,但是方法安全部分中使用的任何注解都可以使用。springSecurityFilterChain
并将其添加到MockMvcBuilders
过滤器中。现在我们可以运行我们的测试,假设我们已使用用户名“user”和角色“ROLE_USER”进行身份验证。当然,就像我们在方法安全中所做的那样,我们可以轻松地更改注解以反映我们想要运行的用户。
无需在测试之前显式进行身份验证,我们可以确保更轻松地隔离测试。只需以用户身份运行,我们就可以大大简化测试(当身份验证很复杂,例如SSO工作流程时尤其如此)。我们还通过消除实际进行身份验证的需要来大大加快测试速度。更重要的是,我们可以使用上面概述的相同步骤,将Spring Security Test支持与HtmlUnit/WebDriver或HtmlUnit/Geb集成。
我们现在已经介绍了Spring Security测试支持如何使方法安全、Web安全和基于HtmlUnit的测试更容易。我们希望您喜欢这个博客系列。
如果您对本博客系列或Spring Security Test支持有任何反馈,我鼓励您通过JIRA、评论区或在Twitter上联系我@rob_winch。当然,最好的反馈是贡献。