2017-02-15 78 views
2

我有一個使用Grails Spring Security Core插件提供的isLoggedIn()函數的控制器。我希望能夠單元測試這些操作,因此我需要一種方法來模擬isLoggedIn()函數,以便它始終返回false。這種方法是由特質提供的,我相信這是我問題的根源。在grails單元測試中由trait提供的覆蓋方法

我已經嘗試了新的功能添加到元類:

UserController.metaClass.isLoggedIn = { -> false} 

這似乎並不然而,要工作,;原來的方法仍然被調用。

有關如何實現這一點的任何建議?

回答

3

您需要定義的吸氣劑:

UserController.metaClass.getIsLoggedIn = { -> false } 

作爲一個例子,下面的代碼:

class UserController { 
    def isLoggedIn = "original" 
} 


UserController.metaClass.getIsLoggedIn = { -> "get" } 
UserController.metaClass.isLoggedIn = { -> "direct" } 


def u = new UserController() 
println u.isLoggedIn 

打印:

get 
+0

該解決方案使用'loggedIn'後工作而不是'isLoggedIn()',並重寫'getLoggedIn()'。 – Lagostra