Unit testing 带继承的Grails单元测试控制器

Unit testing 带继承的Grails单元测试控制器,unit-testing,grails,controller,Unit Testing,Grails,Controller,我在对控制器进行单元测试时遇到了一个问题。在尝试测试请求时,测试错误地指向错误的方法。下面的示例应该清楚地说明问题 父控制器 class ExampleParentController { def someMethod = { render "FALSE" } def someMethod(def object) { render "DEFINITELY FALSE" } } class ExampleChildCon

我在对控制器进行单元测试时遇到了一个问题。在尝试测试请求时,测试错误地指向错误的方法。下面的示例应该清楚地说明问题

父控制器

class ExampleParentController {

    def someMethod = {
        render "FALSE"
    }

    def someMethod(def object)
    {
        render "DEFINITELY FALSE"
    }
}
class ExampleChildController extends ExampleParentController {

    def someMethod = {
        render "TRUE"
    }
}
子控制器

class ExampleParentController {

    def someMethod = {
        render "FALSE"
    }

    def someMethod(def object)
    {
        render "DEFINITELY FALSE"
    }
}
class ExampleChildController extends ExampleParentController {

    def someMethod = {
        render "TRUE"
    }
}
测试类

class ExampleChildControllerTests extends ControllerUnitTestCase {

    protected void setUp() {
        super.setUp()
    }

    protected void tearDown() {
        super.tearDown()
    }

    void testSomeMethod() {
        controller.someMethod()
        def result = controller.response.contentAsString
        assertEquals ("TRUE", result)
    }
}

我希望
controller.someMethod()
将呈现“TRUE”。这在应用程序运行时执行时非常有效,因为
someMethod(def object)
不会作为端点公开。有没有办法指定要执行的方法

我找到了绕过它的方法。只需将该字段分配给一个变量,然后将该变量作为普通闭包对象执行<代码>def clos=controller.someMethod;clos()您正在使用Grails1.x吗?请注意,对于2.x,方法作为操作处理。似乎someMethod的闭包被视为1参数方法,因为当我将
someMethod(def对象)
的参数结构更改为
someMethod(def对象,def另一个)
时,测试成功通过。在我能够重构代码来重命名方法之前,我正在编写测试来执行闭包块。