2012-07-06 83 views
3

在Grails 2.0.4中,我試圖編寫一個調用靜態SpringSecurityUtils.reauthenticate的控制器單元測試。測試在該調用中返回一個NullPointerException。在調試器中,我可以看到沒有填充SpringSecurityUtils的Groovy動態屬性(聲明的方法等)。爲什麼SpringSecurityUtils在這個Grails單元測試中爲null?

我注意到在運行測試時,單元測試失敗後發出「配置Spring Security Core」日誌消息。下面是一個簡單的測試:

class ReproTest { 
    void testSpringSecurityUtils() { 
     String.valueOf(true) // OK: a public final class from the JDK 
     URLUtils.isRelativeURL("foo") // OK: a class from another plugin 
     SpringSecurityUtils.reauthenticate "user", "pw" // fails, NPE 
    } 
} 

我最初的反應是,也許插件在單元測試是無法訪問的,但如果是這樣,爲什麼是URLUtils呼叫工作?爲什麼測試「足夠」初始化插件,但在測試完成後?

+0

也許http://nerderg.com/Grails幫助您用SpringSecurity進行測試 – 2012-07-06 13:11:51

回答

3

對於單元測試,容器未啓動。沒有春季注射或「grails善良」正在發生。您會在日誌中看到插件在單元測試運行後正在初始化,因爲它[集裝箱]確實開始進行集成測試。如果你想測試SpringSecurityUtils,雖然猜測它已經在插件中正確測試過了,但你會想寫一個集成測試。

+0

謝謝!我的測試目標是測試一個控制器,SpringSecurityUtils是達到目的的一種手段,但我會將其移至集成測試。 (儘管我在單元測試期間爲什麼資源插件中的類可用,但我仍然感到困惑。) – withoutairs 2012-07-07 19:21:53

+0

代碼和依賴項仍然存在。只是沒有一個容器/彈簧依賴管理。您對URLUtils的調用是靜態調用,可能沒有其他容器管理的依賴關係,因此它可以工作。 SpringSecurityUtils調用可能注入了依賴項。 (必須查看代碼才能確定,但​​是由於類似NPE的原因,猜測你的測試失敗了?) – 2012-07-09 13:44:37

+0

正確,NPE - 上面的代碼示例演示了它。 SpringSecurityUtils.reauthenticate的確注入了一個依賴項(因此無論如何它都是一個失敗的原因),但真正令我困惑的是爲什麼SpringSecurityUtils沒有獲得groovified。哦,我很高興有時會感到困惑。 – withoutairs 2012-07-10 19:17:15

相關問題