2013-08-21 84 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()' –