Grails mockFor以及如何最好地测试方法使用正确的参数调用

时间:2011-03-06 14:52:55

标签: unit-testing grails mocking

我想测试控制器使用正确的参数调用服务方法。最好的方法是什么?

我目前的计划是使用mockFor,然后通过闭包检查传入的值。是否有更好的方法通过mockFor或模拟对象进行测试,类似于我可以用mockito执行同样的方法调用参数值测试?

class HappyControllerTests extends ControllerUnitTestCase {
       :
    void testSomeValue() {
        def mockControl = mockFor(HappyService)
        def givenSomeItem = null
        mockControl.demand.serviceMethod(1..99) { String someItem -> givenSomeItem = someItem; }
        controller.happyService = mockControl.createMock() 

        controller.someAction()

        mockControl.verify()
        assertEquals("specific value", givenSomeItem)
    }
}

谢谢!

1 个答案:

答案 0 :(得分:13)

我很少使用mockFor,因为我发现groovy内置了metaClass的东西而且as ClassName更易于使用且更强大,我会这样做:

void testSomeValue() {
    def givenSomeItem = null
    controller.happyService = [
        serviceMethod: { String someItem -> givenSomeItem = someItem }
    ] as HappyService

    controller.someAction()
    assertEquals "specific value", givenSomeItem
}