2013-08-21 53 views
0

我在Spring应用程序演员对象测试

public static String getCurrentUserStudentId() { 
    return ((LdapPerson) SecurityContextHolder.getContext().getAuthentication().getPrincipal()).getID(); 
} 

这个工程上的应用程序运行,但是当我运行一个测试调用这个方法,它给

org.springframework.security.web.authentication.preauth.PreAuthenticatedAuthenticationToken cannot be cast to fi.utu.security.ldap.userdetails.LdapPerson 

以下方法我不熟悉Spring Security给这些可能相关的文件,但问我。我希望有人能告诉我该怎么做。

回答

0

SecurityContextHolder在静态变量中保留对“策略”的引用,这意味着此详细信息从测试泄漏到测试。

您有几种选择:

  1. 在您的测试,使用其中SecurityContextHolder

  2. 的制定者之一,创建一个模拟实现了正确的战略getCurrentUserStudentId它返回一个固定的结果进行测试。

  3. 将代码获取当前用户ID到一个bean并注入,而不是调用SecurityContextHolder。实现这个bean的两个版本:一个调用SecurityContextHolder,另一个返回一个字符串。

+0

我认为只在测试类内部进行修改会很好。你能给我一个设置测试策略的代码示例吗?我不确定你的意思。 – mjgirl

+0

通过代码调用'setContext()'和'setStrategyName()' –