2017-02-15 47 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