【发布时间】:2016-04-04 00:21:25
【问题描述】:
我正在尝试为来宾用户帐户编写单元测试。被测代码通过调用此方法检查来宾,在单元测试中为来宾帐户返回 null。
/**
* Determines if the user is a guest account.
*
* @return True if the account is guest account, false otherwise.
*/
public boolean isGuest() {
Authentication auth = SecurityContextHolder.getContext().getAuthentication();
if (auth != null) {
if (auth instanceof AnonymousAuthenticationToken) {
return true;
} else {
return false;
}
} else {
return false;
}
}
在服务器 Tomcat 容器中,匿名用户是可以的,它返回一个 AnonymousAuthenticationToken 的实例。因为容器环境和单元测试环境都共享同一个安全配置类,假设安全配置可能是正确的。
下面的测试代码也适用于MockUser,所以我也认为安全测试配置可能没问题:
@Test
@WithMockUser(username="Test.Customer.1@mailinator.com", roles = {"ADMIN"})
public void testCheckoutPage() throws Exception{
logger.entry();
String targetView = OrderViews.convertViewReference(getPageDirectory(), OrderViews.CHECKOUT_LOGIN_PAGE, false);
String targetUrl = "/checkout";
Order order = OrderBuilder.buildSampleGuestOrder(OrderStatus.NEW, 5);
prepareMocks(order);
Map<String, Object> sessionAttrs = new HashMap<>();
sessionAttrs.put(OrderConstants.OPEN_ORDER_ID_ATTRIBUTE, order.getId());
this.mockMvc.perform(get(targetUrl).sessionAttrs(sessionAttrs))
.andExpect(status().isOk())
.andExpect(view().name(targetView))
.andExpect(model().attribute("order", order))
.andExpect(model().attributeExists("loginForm"));
this.mockMvc.perform(MockMvcRequestBuilders.post(targetUrl))
.andExpect(status().isMethodNotAllowed());
logger.exit();
}
有人知道如何在单元测试中模拟匿名身份验证令牌吗?
【问题讨论】:
标签: spring-security spring-test spring-test-mvc